日期到纪元,反之亦然 - JavaScript

时间:2013-08-31 08:12:38

标签: javascript jquery

我需要将日期转换为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/2013 instad 1/3/2013

fiddle link

2 个答案:

答案 0 :(得分:3)

你有两个问题:

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

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

(请注意,查看documentation for the Date constructor并不清楚您所获得的代码是否应该起作用,因为它既不是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);

答案 1 :(得分:1)

var date = new Date('1/3/2013');

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

  

/ /

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

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