teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

step属性について追記

2017/10/11 00:41

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -20,4 +20,10 @@
20
20
  <form><input type="datetime-local" value="<?= $date->format('Y-m-d\TH:i') ?>"></form>
21
21
  </body>
22
22
  </html>
23
+ ```
24
+
25
+ なおデフォルトでは入力は60秒単位、つまり分までしか取り扱いません。もし秒まで取り扱いたい場合は `step="1"` 属性を追加し、分解能を1秒に変更してください。
26
+
27
+ ```php
28
+ <input type="datetime-local" value="<?= $date->format('Y-m-d\TH:i:s') ?>" step="1">
23
29
  ```

1

回答をブラッシュアップ

2017/10/11 00:40

投稿

miyahan
miyahan

スコア3095

answer CHANGED
@@ -1,19 +1,23 @@
1
- datetime-local の値は ISO 8601 に準拠していなければなりません。つまり `YYYY-MM-DDThh:mm:ss` です。
1
+ すでにお分かりの通り datetime-local の値は ISO 8601 に準拠していなければなりません。
2
2
 
3
3
  [input 要素 | HTML5 タグリファレンス | W3 Watch Reference](https://reference.hyper-text.org/html5/element/input/)
4
4
 
5
- サンプルコード:
5
+ つまり、date() および DateTime::format() に渡す書式指定文字は `Y-m-d\TH:i` となります。
6
6
 
7
+ また input フォームの初期値は value 属性にセットすることで反映されます。
8
+
9
+ [<input type="datetime-local">-HTML5タグリファレンス](http://www.htmq.com/html5/input_type_datetime-local.shtml)
10
+
11
+ まとめるとこんな感じのコードになります:
12
+
7
13
  ```php
8
14
  <?php
9
- $sql_date = '2017-10-11 09:20:30';
15
+ $date = new DateTime('2017-10-11 09:20:30');
10
16
  ?>
11
17
  <!DOCTYPE html>
12
18
  <html>
13
19
  <body>
14
- <form>
15
- <input type="datetime-local" value="<?= date('Y-m-d\TH:i', strtotime($sql_date)) ?>">
20
+ <form><input type="datetime-local" value="<?= $date->format('Y-m-d\TH:i') ?>"></form>
16
- </form>
17
21
  </body>
18
22
  </html>
19
23
  ```