从字符串创建时Javascript日期错误

时间:2015-12-04 01:05:51

标签: javascript node.js timestamp

我在字符串中使用javascript创建新数据时遇到了一个非常奇怪的错误。 我的字符串看起来像2015-12-04T01:42:13 代码如下

date = new Date(2015-12-04T01:42:13)
console.log(date);

console.log的结果是2015-12-04T02:42:13,但为什么呢?我现在UTC在我的时区是+1。但我将数值从数据库中取出并将其与实际日期进行比较,以查看已经过了多长时间。我不希望它被纠正,因为它已经在这个时区获得了。为什么会这样?逻辑是什么? 如何从字符串创建确切的日期?

这实际上似乎是node.js的一个问题。我无法在任何地方重复它。

1 个答案:

答案 0 :(得分:-1)

感谢@zerkms,我找到了一种方法来获取数据。我写了2个函数来确保数据以正确的方式保存在数据库中。它以下列格式向我发送字符串:YYYY-MM-DDTHH:MM:SS + GMT(2015-12-05T13:11:59 + 01:00)。可以使用'new Date(“2015-12-05T13:11:59 + 01:00”)'

正确解释此字符串
var helper = new function(){
    //getting the timezone in correct format
    this.getTimeZone = function(){
        var offset = new Date().getTimezoneOffset(), o = Math.abs(offset);
        return (offset < 0 ? "+" : "-") + ("00" + Math.floor(o / 60)).slice(-2) + ":" + ("00" + (o % 60)).slice(-2);
}

    this.dateString = function(date){
        var year = date.getFullYear();
        month = date.getMonth() + 1; // months are zero indexed
        month = ("0" + month).slice(-2);
        day = date.getDate();
        day = ("0" + day).slice(-2);
        hour = date.getHours();
        hour = ("0" + hour).slice(-2);
        minute = date.getMinutes();
        minute = ("0" + minute).slice(-2);
        second = date.getSeconds();
        second = ("0" + second).slice(-2);
        timezone = helper.getTimeZone();

        return year + "-" + month + "-" + day + "T" + hour + ":" +
        minute + ":" + second + timezone;
    }
}