来自时间戳的错误日期

时间:2011-06-14 08:55:03

标签: javascript timestamp

我有一个自己无法解决的问题。

这是从我的网站数据库中获取的时间戳1308085200。它代表2011-06-15 12:00:00

这是我用来以人类可读格式“获取”日期的javascript代码。

var date    = new Date(1308085200 * 1000);
var year    = date.getFullYear();
var month   = date.getMonth();
var day     = date.getDate();
var hour    = date.getUTCHours();
var minute  = date.getUTCMinutes();
var seconds = date.getUTCSeconds();

问题是我的结果错了。例如,上面的代码显示2011-5-15 21:0:0而不是2011-06-15 12:00:00

我做错了什么以及如何解决这个问题?

4 个答案:

答案 0 :(得分:9)

JavaScript的Date::getMonth()返回从0到11的从零开始的整数,这就是为什么您的日期显示的是5月而不是6月。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getMonth

更新

至于时间部分,这就是我得到的(AEST)

var d = new Date(1308085200000); // Wed Jun 15 07:00:00 GMT+1000 (EST)
d.toUTCString() // Tue, 14 Jun 2011 21:00:00 GMT
d.getUTCFullYear() // 2011
d.getUTCMonth() // 5
d.getUTCDate() // 14
d.getUTCHours() // 21
d.getUTCMinutes() // 0
d.getUTCSeconds() // 0

看起来您的时间戳实际上并非您认为的那样。

答案 1 :(得分:1)

好吧,JavaScript的getMonth()函数很糟糕,从1开始为0。你必须添加一个。

也许你想使用date js,因为它解决了其中一些问题。

答案 2 :(得分:1)

日期和时间可能因您所在的时区而异。这就是为什么在我的区域(GMT + 2000)new Date(1308085200*1000)显示 Tue Jun 14 2011 23:00:00 GMT + 0200( W.欧洲夏令时)。检查this reference,了解您一直想知道的有关javascript日期的所有信息

关于格式化(前导零等),也许this jsfiddle可以帮助你吗?

答案 3 :(得分:0)

试试这个:

 function timeConverter(createdAt) {
  var date = new Date(createdAt);
  date.toUTCString()
  var year = date.getUTCFullYear();
  var month = date.getUTCMonth()+1;
  var day = date.getUTCDate();
  return day+"-"+month+"-"+year;
}