1

我在初始化 javascript 日期对象时遇到了一个奇怪的问题,无论我初始化什么,它都将日期显示为 1 JAN 1970 05:30;

这是我尝试初始化的方式

var d=new date(27-02-1989);

警报“d”显示 1970 年 1 月 1 日.....,有时也需要从数据库传递的日期,但格式为 mm/dd/yyyy,而不是我想要的格式,即 dd/mm/yyyy

这个问题突然出现了,因为几天前一切正常,但是今天打开项目后(2天后)这个问题让我很恼火

4

5 回答 5

2

我看到你已经接受了一个答案,但这不是你能做的最好的。没有一种格式可以被所有常用的浏览器正确解析,至少在 IE 8 中接受的答案会失败。

将字符串转换为日期的唯一安全方法是解析它,例如

var s = '27-02-1989';
var bits = s.split('-');
var date = new Date(bits[2], --bits[1], bits[0]);
于 2012-06-05T08:44:41.397 回答
1

根据这里你可以尝试:

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

所以供您使用(编辑:您需要记住月份是从零开始的)

var d = new Date(1989,01,27);

请注意 - 使用Date(大写 D)

于 2012-06-05T08:21:52.423 回答
1

您正在使用负整数值 ( 27-02-1989 == -1964) 进行初始化。对象的构造函数采用此处Date列出的参数。

如果您想传递字符串,它们需要采用符合 RFC2822 的格式(参见此处)。

于 2012-06-05T08:23:45.920 回答
1
// Transform your european date in RFC compliant date (american)
var date = '27-02-1989'.split('-').reverse().join('-');

// And this works
var d = new Date( date );

证明:

证明

于 2012-06-05T08:23:50.317 回答
0

首先

var d=new date(27-02-1989); 

在 javascript 中是完全错误的表达式,而且即使我们更正确地重写它:

var d=new Date('27-02-1989');

没有办法在 js 中本地解析这个日期字符串。

您可以尝试以下解决方案:

  • 将字符串转换为 ISO8601:YYYY-mm-dd,这可以被大多数现代浏览器解析,或者您可以使用许多 js 库进行 polyfill

  • 通过'-'拆分字符串字符串,然后使用日期构造函数new Date(year, month-1, day)

  • 拆分字符串并在对象上使用setDate, setMonth, setYear方法new Date()

    请注意,在最后两种方法中,您需要从月份值中减去 1,因为月份是从零开始的(0 代表一月,11 代表十二月)

于 2012-06-05T08:44:04.130 回答