5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HTML5 <input type="datetime-local"> に現在時刻を設定するには

Last updated at Posted at 2020-03-27

日付と時刻を設定できるブラウザーネイティブなフォーム<input type="datetime-local">を便利に使う方法をご紹介します。CodePenでデモを作りました。カレンダーアイコンをクリックすると、日付や時刻を設定できます。

See the Pen HTML5 input datetime-local by Hirokazu Takatama (@takatama) on CodePen.

このデモでは、Webページを開いたときに現在時刻を設定しています。ソースコードはStackoverflowに掲載しています。

HTMLにはid="cal"<input>を配置します。

<input type="datetime-local" id="cal">

JavaScriptでは<input>valueに時刻の文字列をyyyy-MM-ddThh:mmの形式で設定します。

function toLocalISOString(date) {
  const localDate = new Date(date - date.getTimezoneOffset() * 60000); //offset in milliseconds. Credit https://stackoverflow.com/questions/10830357/javascript-toisostring-ignores-timezone-offset

  // Optionally remove second/millisecond if needed
  localDate.setSeconds(null);
  localDate.setMilliseconds(null);
  return localDate.toISOString().slice(0, -1);
}

window.addEventListener("load", () => {
  document.getElementById("cal").value = toLocalISOString(new Date());
});

<input>に設定する文字列はtoISOString().slice(0, -1)で最後のZを消すことで生成できるのですが、UTC が返るためタイムゾーンを考慮する必要があります。そこでgetTimezoneOffset()のずらしますが、分からミリ秒に変換しています。

その後、setSeconds(null)とすれば秒を、setMilliseconds(null)とすればミリ秒をフォームに出力しないように設定できます。

なお、valueに設定できる文字列は、次の形式のいずれかです。

  • yyyy-MM-ddThh:mm
  • yyyy-MM-ddThh:mm:ss
  • yyyy-MM-ddThh:mm:ss.SSS

この形式に従わないものを設定しようとすると、開発者コンソールに次のエラーが表示されます。

The specified value "XXX" does not conform to the required format.  The format is "yyyy-MM-ddThh:mm" followed by optional ":ss" or ":ss.SSS".

仕様はこちらです。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?