1. ホーム
  2. javascript

[解決済み】dd-mm-yyyyの文字列を日付に変換する

2022-04-12 22:59:58

質問

JavaScriptでdd-mm-yyyy形式の文字列を日付オブジェクトに変換するには、以下のようにします。

 var from = $("#datepicker").val();
 var to = $("#datepickertwo").val();
 var f = new Date(from);
 var t = new Date(to);

("#datepicker").val() には、dd-mm-yyyy という書式の日付が含まれています。 次のようにすると、"Invalid Date"が表示されます。

alert(f);

これは'-'記号が原因なのでしょうか?どうすれば克服できるのでしょうか?

どのように解決するのですか?

で分割してください。

文字列を必要な部分にパースします。

var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])

正規表現を使用する

var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))

なぜ正規表現を使わないのですか?

ハイフンで区切られた3つの部分からなる文字列を扱うことが分かっているからです。

しかし、同じ文字列を別の文字列の中で探すのであれば、正規表現が適している。

再利用

サンプルコードやコードベース内の他の場所で複数回行っているので、関数でラップしてください。

function toDate(dateStr) {
  var parts = dateStr.split("-")
  return new Date(parts[2], parts[1] - 1, parts[0])
}

として使用する。

var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)

また、関数にjQueryを使っても構わないのであれば。

function toDate(selector) {
  var from = $(selector).val().split("-")
  return new Date(from[2], from[1] - 1, from[0])
}

として使用する。

var f = toDate("#datepicker")
var t = toDate("#datepickertwo")

モダンなJavaScript

もしあなたがよりモダンなJSを使うことができるなら、配列の再構築もいい感じです。

const toDate = (dateStr) => {
  const [day, month, year] = dateStr.split("-")
  return new Date(year, month - 1, day)
}