【JS】JavaScript での 日付 / 日時 の扱い

■ はじめに

ライブラリとかに関しては、以下の関連記事に記載。

TypeScript での 日付 / 日時 の扱い
https://dk521123.hatenablog.com/entry/2021/01/29/231952

 ■ 使用上の注意

1) ゼロ埋めしないと、表示されない

  * 例えば、「2018-1-1」ではなく、ゼロ埋めして、「2018-01-01」にする必要がある

2)「yyyy/MM/dd」では表示されない

 * 「yyyy-MM-dd」にするひつようがある

https://qiita.com/terrym/items/6257f6507ca19f00cdf3

 * (new Date()).getYear() ではなく、getFullYear()
 * (new Date()).getMonth() は、ゼロ発進なので、 「+ 1」する

3)IE11では未対応

 * IE11では、type="date"、type="time"は対応していない

 ■ サンプル

現在日時で日付 / 日時を初期化する

sample.html

<!DOCTYPE html>
<html lang="ja">
<head>
<title>Demo</title>
<meta charset="UTF-8">
<script type="text/javascript">
window.onload = function() {
  console.log("Enter");
  
  document.getElementById("date1").value = getCurrentDate();
  document.getElementById("time1").value = getCurrentTime();
  document.getElementById("time2").value = getDefaulTime();
  document.getElementById("dateFormatWithSlash1").textContent = toDateToSetForBrowser("2018/08/08");
  document.getElementById("dateFormatWithSlash2").textContent = toDateToSetForBrowserPart2("2018/8/18");
}

function getCurrentDate() {
  var now = new Date();

  var year = ('0000' + now.getFullYear()).slice(-4);
  var month = ('00' + (now.getMonth() + 1)).slice(-2);
  var day = ('00' + now.getDate()).slice(-2);
  
  return year + "-" + month + "-" + day;
}
function getCurrentTime() {
  var now = new Date();

  var hours = ('00' + now.getHours()).slice(-2);
  var minutes = ('00' + now.getMinutes()).slice(-2);
  
  return hours + ":" + minutes;
}

function getDefaulTime() {
  var now = new Date();

  var hours = ('00' + now.getHours()).slice(-2);
  var minutes = now.getMinutes() >= 30 ? "30" : "00";

  return hours + ":" + minutes;
}

function toDateToSetForBrowser(targetDate) {
  if (!targetDate) {
    return "";
  }

  return targetDate.replace(/\//g, '-');
}

function toDateToSetForBrowserPart2(targetDate) {
  if (!targetDate) {
    return "";
  }
  var dateParts = targetDate.split("/");
  
  var date = new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
  var year = ('0000' + date.getFullYear()).slice(-4);
  var month = ('00' + (date.getMonth() + 1)).slice(-2);
  var day = ('00' + date.getDate()).slice(-2);
  
  return year + "-" + month + "-" + day;
}
</script>
</head>
<body>
<form id="sampleForm" action="">
<div><input type="date" id="date1"> Date</div>
<div><input type="time" id="time1"> Time1</div>
<div><input type="time" id="time2"> Time2</div>
<div><input type="datetime"> datetime(廃止 https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/datetime)</div>
<div><input type="datetime-local"> datetime-local(現時点で対応は不安定 https://developer.mozilla.org/ja/docs/Web/HTML/Element/Input/datetime-local)</div>
<div><input type="submit"></div>
</form>
<div id="dateFormatWithSlash1">convert result1</div>
<div id="dateFormatWithSlash2">convert result2</div>
</body>
</html>

 ■ 自分用メモ

 * JavaScript の replace には、 replaceAllがない
  => replace(【正規表現】, 【変換後の文字列】)で対応

関連記事

TypeScript での 日付 / 日時 の扱い
https://dk521123.hatenablog.com/entry/2021/01/29/231952
JavaScriptでゼロ埋め
https://dk521123.hatenablog.com/entry/2022/11/01/000000