我在初始化 javascript 日期对象时遇到了一个奇怪的问题,无论我初始化什么,它都将日期显示为 1 JAN 1970 05:30;
这是我尝试初始化的方式
var d=new date(27-02-1989);
警报“d”显示 1970 年 1 月 1 日.....,有时也需要从数据库传递的日期,但格式为 mm/dd/yyyy,而不是我想要的格式,即 dd/mm/yyyy
这个问题突然出现了,因为几天前一切正常,但是今天打开项目后(2天后)这个问题让我很恼火
我在初始化 javascript 日期对象时遇到了一个奇怪的问题,无论我初始化什么,它都将日期显示为 1 JAN 1970 05:30;
这是我尝试初始化的方式
var d=new date(27-02-1989);
警报“d”显示 1970 年 1 月 1 日.....,有时也需要从数据库传递的日期,但格式为 mm/dd/yyyy,而不是我想要的格式,即 dd/mm/yyyy
这个问题突然出现了,因为几天前一切正常,但是今天打开项目后(2天后)这个问题让我很恼火
我看到你已经接受了一个答案,但这不是你能做的最好的。没有一种格式可以被所有常用的浏览器正确解析,至少在 IE 8 中接受的答案会失败。
将字符串转换为日期的唯一安全方法是解析它,例如
var s = '27-02-1989';
var bits = s.split('-');
var date = new Date(bits[2], --bits[1], bits[0]);
根据这里你可以尝试:
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)
您正在使用负整数值 ( 27-02-1989 == -1964
) 进行初始化。对象的构造函数采用此处Date
列出的参数。
如果您想传递字符串,它们需要采用符合 RFC2822 的格式(参见此处)。
// 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 );
证明:
首先
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 代表十二月)