日期对象返回不正确的值

时间:2014-02-27 07:29:04

标签: javascript html date

您好我使用以下代码段将字符串转换为日期对象

var date = new Date("18/01/2011");

日期结果为

Fri Jun 1 00:00:00 UTC+0530 2012

我期望日期的结果为

   Tue Jan 18 00:00:00 UTC+0530 2011

如何使用以dd / MM / yyyy格式提供的字符串

来实现此目的

3 个答案:

答案 0 :(得分:1)

字符串"18/01/2011"未记录在Date构造函数接受的表单中。实际上,在ES5之前, 没有该字符串的文档形式。 ES5添加了伪ISO-8601格式。 (“伪”,因为,奇怪的是,它处理与ISO-8601不同的时区 。)

但实际上,所有浏览器都支持这些格式:

yyyy/mm/dd
mm/dd/yyyy (U.S. format, even on -- say -- UK locale machines)

...当然,当使用未记录的东西时,这是一个风险,你需要仔细测试你的目标引擎。 (特别是mm/dd/yyyy在非美国语言环境中实施时似乎令人惊讶。)

因此,一种选择是重新格式化字符串以适应其中一种。

我首选的选项是自己解析字符串并使用Date(year, month, day)构造函数。记住从月份中减去一个,因为几个月从0开始。您的格式很容易解析:

var parts = theString.split("/");
var date = new Date(parseInt(parts[2], 10),     // year
                    parseInt(parts[1], 10) - 1, // month
                    parseInt(parts[0], 10));    // day

最后:有些库可以帮助解决这些问题,例如MomentJS。

答案 1 :(得分:0)

JavaScript日期的默认格式如下:month / day / year

但如果您无权更改格式,可以这样做:

var datestr = "18/01/2011";
var dateArr =datestr.split("/");
var date = new Date(dateArr[1] + "/" + dateArr[0] + "/" + dateArr[2]);

Date类构造函数的另一个重载只是将整数作为参数传递,其签名如下:

new Date(year, month [, day, hour, minute, second, millisecond]);

所以另一个更合理的方法是:

var datestr = "18/01/2011";
var dateArr =datestr.split("/");
var date = new Date(parseInt(dateArr[2]), parseInt(dateArr[1]), parseInt(dateArr[0]));

如果需要,您还可以向其添加hour, minute, second, millisecond

它是最好的参考资料之一,它拥有您在JavaScript中处理日期所需的一切:

Global Objects: Date

答案 2 :(得分:-1)

引号内的属性是错误的:

new Date();

新日期(价值);

new Date(dateString);

新日期(年,月[,日,小时,分钟,秒,毫秒]);

请结帐http://devdocs.io/javascript/global_objects/date或首先搜索StackOverflow