828

JavaScriptで文字列をDateオブジェクトに変換するにはどうすればよいですか?

var st = "date in some format"
var dt = new Date();

var dt_st = // st in Date format, same as dt.
4

34 に答える 34

973

文字列の解析に最適な文字列形式は、日付 ISO 形式と JavaScript の Date オブジェクト コンストラクターを組み合わせたものです。

ISO 形式の例:YYYY-MM-DDまたはYYYY-MM-DDTHH:MM:SS.

ちょっと待って! 「ISO形式」を使用するだけでは、それ自体では確実に機能しません。文字列は UTC として解析されることもあれば、(ブラウザーのベンダーとバージョンに基づいて) ローカルタイムとして解析されることもあります。ベスト プラクティスは、常に日付を UTC として保存し、UTC として計算を行うことです。

日付を UTC として解析するには、Zを追加します- 例: new Date('2011-04-11T10:20:30Z').

日付を UTC で表示するには を使用し.toUTCString()
日付をユーザーの現地時間で表示するには を使用します.toString()

MDNの詳細| 日付この回答

古い Internet Explorer との互換性 (9 未満のバージョンの IE は Date コンストラクターで ISO 形式をサポートしていません) のために、datetime 文字列表現をその部分に分割してから、datetime 部分を使用してコンストラクターを使用できます new Date('2011', '04' - 1, '11', '11', '51', '00')。月の数は 1 少なくする必要があることに注意してください。


別の方法 - 適切なライブラリを使用します。

指定したタイム ゾーンで日付を解析できるライブラリMoment.jsを利用することもできます。

于 2011-04-11T09:53:38.570 に答える
149
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

出力は次のようになります。

dt => Date {Fri Apr 26 2013}
于 2013-04-26T11:27:29.063 に答える
31

Date() に引数として渡します。

var st = "date in some format"
var dt = new Date(st);

次の例を使用して、日付、月、年にアクセスできますdt.getMonth()

于 2011-04-11T09:26:13.713 に答える
27

素晴らしい瞬間ライブラリ (Node.js プロジェクトなど) を使用できる場合は、次を使用して日付を簡単に解析できます。

var momentDate = moment("2014-09-15 09:00:00");

を介してJS日付オブジェクトにアクセスできます

momentDate ().toDate();
于 2014-09-22T09:08:52.223 に答える
26

小型でスマートなソリューションを探している人向け:

String.prototype.toDate = function(format)
{
  var normalized      = this.replace(/[^a-zA-Z0-9]/g, '-');
  var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-');
  var formatItems     = normalizedFormat.split('-');
  var dateItems       = normalized.split('-');

  var monthIndex  = formatItems.indexOf("mm");
  var dayIndex    = formatItems.indexOf("dd");
  var yearIndex   = formatItems.indexOf("yyyy");
  var hourIndex     = formatItems.indexOf("hh");
  var minutesIndex  = formatItems.indexOf("ii");
  var secondsIndex  = formatItems.indexOf("ss");

  var today = new Date();

  var year  = yearIndex>-1  ? dateItems[yearIndex]    : today.getFullYear();
  var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1;
  var day   = dayIndex>-1   ? dateItems[dayIndex]     : today.getDate();

  var hour    = hourIndex>-1      ? dateItems[hourIndex]    : today.getHours();
  var minute  = minutesIndex>-1   ? dateItems[minutesIndex] : today.getMinutes();
  var second  = secondsIndex>-1   ? dateItems[secondsIndex] : today.getSeconds();

  return new Date(year,month,day,hour,minute,second);
};

例:

"22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss");
"2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss");
于 2016-07-26T15:14:11.200 に答える
21

ただnew Date(st);

それが適切な形式であると仮定します。

于 2011-04-11T09:23:08.430 に答える
19

new Date(2000, 10, 1)「Wed Nov 01 2000 00:00:00 GMT+0100 (CET)」が表示されます

月の0が1月を与えることを確認してください

于 2011-04-11T09:25:53.750 に答える
14

「dd/MM/yyyy」形式から変換したい場合。次に例を示します。

var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/;
var arrayDate = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

このソリューションは、IE バージョン 9 未満で機能します。

于 2015-06-22T14:29:50.817 に答える
12

タイムスタンプは数値にキャストする必要があります

var ts = '1471793029764';
ts = Number(ts); // cast it to a Number
var date = new Date(ts); // works

var invalidDate = new Date('1471793029764'); // does not work. Invalid Date
于 2016-08-21T15:42:34.570 に答える
11

Date.parseほとんどあなたが望むものを手に入れます。am/部分でチョークしpmますが、いくつかのハッキングで動作させることができます:

var str = 'Sun Apr 25, 2010 3:30pm',
    timestamp;

timestamp = Date.parse(str.replace(/[ap]m$/i, ''));

if(str.match(/pm$/i) >= 0) {
    timestamp += 12 * 60 * 60 * 1000;
}
于 2011-04-11T09:30:42.060 に答える
5

このためのフィドルを作成しました。任意の日付文字列で toDate() 関数を使用して、日付形式を指定できます。これにより、Date オブジェクトが返されます。 https://jsfiddle.net/Sus​​hil231088/q56yd0rp/

"17/9/2014".toDate("dd/MM/yyyy", "/")
于 2016-06-23T14:18:48.193 に答える
2

日付形式に変換する前に文字列の内容を確認する必要がある場合:

// Convert 'M/D/YY' to Date()
mdyToDate = function(mdy) {
  var d = mdy.split(/[\/\-\.]/, 3);

  if (d.length != 3) return null;

  // Check if date is valid
  var mon = parseInt(d[0]), 
      day = parseInt(d[1]),
      year= parseInt(d[2]);
  if (d[2].length == 2) year += 2000;
  if (day <= 31 && mon <= 12 && year >= 2015)
    return new Date(year, mon - 1, day);

  return null; 
}
于 2015-10-16T01:08:15.603 に答える
0

ISO 8601 風の日付文字列は、標準と同様に優れていますが、まだ広くサポートされていません。

これは、どの日付文字列形式を使用する必要があるかを判断するための優れたリソースです。

http://dygraphs.com/date-formats.html

はい、それはあなたの日付文字列が

"2014/10/13 23:57:52" それ以外の "2014-10-13 23:57:52"

于 2014-10-14T02:28:30.880 に答える
0

var a = "13:15"
var b = toDate(a, "h:m")
//alert(b);
document.write(b);

function toDate(dStr, format) {
  var now = new Date();
  if (format == "h:m") {
    now.setHours(dStr.substr(0, dStr.indexOf(":")));
    now.setMinutes(dStr.substr(dStr.indexOf(":") + 1));
    now.setSeconds(0);
    return now;
  } else
    return "Invalid Format";
}

于 2016-05-26T16:56:12.000 に答える
0
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);
于 2015-05-12T14:34:20.150 に答える
-4

次のこともできます: mydate.toLocaleDateString();

于 2015-03-25T21:14:50.090 に答える
-11

この形式を使用してください....

//get current date in javascript

  var currentDate = new Date();


// for getting a date from a textbox as string format

   var newDate=document.getElementById("<%=textBox1.ClientID%>").value;

// convert this date to date time

   var MyDate = new Date(newDate);
于 2014-09-30T15:47:18.600 に答える