如何在javascript中从字符串创建日期对象

Bad*_*der 162 javascript string date

有这个字符串30/11/2011.我想将它转换为日期对象.

我需要使用:

Date d = new Date(2011,11,30);   /* months 1..12? */
Run Code Online (Sandbox Code Playgroud)

要么

Date d = new Date(2011,10,30);   /* months 0..11? */
Run Code Online (Sandbox Code Playgroud)

Dog*_*ert 235

var d = new Date(2011,10,30);
Run Code Online (Sandbox Code Playgroud)

因为月份从js中的0开始索引.

  • 很惊讶有人注意到这一点大约1.5年后发现了24,000多个观点. (65认同)
  • 我认为应该是var d = new Date(2011,10,30); (28认同)
  • 它也可以直接选择日期,作为单个字符串`const date = new Date("2018-05-09")` (5认同)
  • 要小心!如果您的时区为负数, `const date = new Date("2018-05-09")` 不会给您正确的日期。使用 `const date = new Date("2018-05-09T00:00:00")` 或 `const date = new Date("2018/05/09")` 或 `const date = new Date(2018, 4, 9)` 代替。 (2认同)

Igo*_*mov 70

你绝对想要使用第二个表达式,因为JS中的月份从0开始枚举.

您也可以使用Date.parse方法,但它使用不同的日期格式:

var d = Date.parse("11/30/2011");
Run Code Online (Sandbox Code Playgroud)

  • 还要注意[Date.parse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse)返回*数*,特别是自1970年以来的ms尽管Dogbert的答案将返回一个JS Date对象,并且可以从`__proto__`中选择一些强大的方法.[演示jsFiddle](https://jsfiddle.net/KyleMit/bt8gwtyb/) (4认同)
  • 使用解析方法时要注意时区问题。 (3认同)
  • 如果解析的日期无效(例如2月30日),请注意Javascript静默地返回与解析的日期完全不同的日期. (3认同)
  • 这将返回一个数字,而不是日期. (2认同)
  • 根据官方文档: 注意:由于浏览器差异和不一致,强烈建议不要使用 Date 构造函数(和 Date.parse,它们是等效的)解析日期字符串。避免通过解析字符串来创建 Date 对象。相反,构建您自己的函数,从您拥有的字符串中了解年、月和日,然后通过将不同的数字传递给构造函数来创建日期 (2认同)

Chr*_*kar 56

语法如下:

new Date(year, month [, day, hour, minute, second, millisecond ])
Run Code Online (Sandbox Code Playgroud)

所以

Date d = new Date(2011,10,30);
Run Code Online (Sandbox Code Playgroud)

是正确的; 日,小时,分钟,秒,毫秒是可选的.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date

  • 实际上,根据链接,天也是可选的.它默认为该月的第一天. (2认同)

May*_*ank 55

如上所述,存在多种创建日期的方法.我不会重复同样的事情.这是在Java Script中将String转换为Date的小方法,如果这是您正在寻找的,

function compareDate(str1){
// str1 format should be dd/mm/yyyy. Separator can be anything e.g. / or -. It wont effect
var dt1   = parseInt(str1.substring(0,2));
var mon1  = parseInt(str1.substring(3,5));
var yr1   = parseInt(str1.substring(6,10));
var date1 = new Date(yr1, mon1-1, dt1);
return date1;
}
Run Code Online (Sandbox Code Playgroud)

  • 这非常有用,应该是最佳答案,因为它实际上以适应性的方式回答问题,具体取决于您的日期字符串格式(并且没有任何时区问题的风险). (4认同)

Pea*_*arl 28

非常简单:

var dt=new Date("2011/11/30");
Run Code Online (Sandbox Code Playgroud)

日期应为ISO格式yyyy/MM/dd.

  • 据我所知,官方的ISO8601格式是yyyy-MM-dd(https://en.wikipedia.org/wiki/ISO_8601) (7认同)
  • @ValterEkholm 它在 chrome 和 ff 中工作正常,但在 safari 中不行 (2认同)

pas*_*lus 12

首先像这样提取字符串

var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);
Run Code Online (Sandbox Code Playgroud)

然后,

var d = new Date( dateString[3], dateString[2]-1, dateString[1] );
Run Code Online (Sandbox Code Playgroud)


Sun*_*sen 7

一直以来,有关将在实际JavaScript的规范的任何问题,我会强烈建议在Mozilla开发者网络,以及他们的JavaScript基准.

正如它在Date对象的主题中所述,关于您使用的参数变体:

new Date(year, month, day [, hour, minute, second, millisecond ])
Run Code Online (Sandbox Code Playgroud)

关于月份参数:

month表示月份的整数值,从1月的0开始到12月的11.

显然,你应该使用11月的10号月份.

PS:我推荐MDN的原因是对事物,示例和浏览器兼容性图表的正确性,良好解释.