我需要将日期转换为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
?
答案 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());