0

我需要将日期转换为 Java 纪元,然后读取并转换回来。不知道我在这里做错了什么?

var date = new Date('1/3/2013');
var timeStamp = date.getTime();
console.log(timeStamp);
var revertDate = new Date(timeStamp);
console.log(revertDate.getDate()+'/'+revertDate.getMonth()+'/'+revertDate.getFullYear());

输出是3/0/2013instad 1/3/2013?

小提琴链接

4

2 回答 2

3

你这里有两个问题:

  • Date构造函数采用格式M/d/yyyy- 而您正在记录d/M/yyyy格式。如果可能的话,我个人建议使用 ISO-8601 格式:yyyy-MM-dd
  • 您没有考虑getMonth()返回基于 0 的值的事实

对于格式化方面,您最好使用toISOString或类似的东西,而不是自己进行格式化。

(请注意,查看构造函数的文档Date并不清楚您所拥有的代码是否应该工作,因为它既不是 RFC822 也不是 ISO-8601 格式。)

这两个问题都与Date数值之间的转换无关。如果您更改日志记录,您会清楚地看到:

var date = new Date('1/3/2013');
var timeStamp = date.getTime();
console.log(date);
var revertDate = new Date(timeStamp);
console.log(revertDate);
于 2013-08-31T08:16:02.433 回答
1
var date = new Date('1/3/2013');

构造Date函数以这种方式解析这个给定的字符串:

//

所以,在这种情况下,Month 是 1,Day 是 3,Year 是 2013。那里发生了什么?嗯,这很简单。这个日期的公历表示(特别是Day / Month / Year)不是 Date 构造函数使用的表示,因此它将1(月份)解析为一月,3作为该月的第三天(第三1 月)和正确的年份,2013 年。现在,由于其基于 0 的索引,构造的Date对象将返回一个月,这是n-1提供的一个月。这就是为什么你得到3/0/2013. 这是 2013 年第 0 个月(即 1 月)的第三天 (3)。如果你想得到你的真实日期,你必须这样做:

var date = new Date('3/1/2013');
console.log(date.getDate()+'/'+(date.getMonth()+1)+'/'+date.getFullYear());
于 2013-08-31T08:38:52.777 回答