Date parsed with gmt + 2 hours

风流意气都作罢 提交于 2019-12-13 09:11:54

问题


I always get the wrong date when I use var date = new Date(timestring), there is always +2 GMT hours.

var unsortedPlayTimes =
    [{date:'2014-08-11T09:30:00'},
        {date:'2014-08-11T08:30:00'},
        {date:'2014-08-11T08:15:00'},
        {date:'2014-08-11T08:45:00'},
        {date:'2014-08-11T12:30:00'},
        {date:'2014-08-11T10:30:00'},
        {date:'2014-08-11T11:30:00'},
        {date:'2014-08-11T07:30:00'},
        {date:'2014-08-11T13:00:00'},
        {date:'2014-08-11T23:00:00'},
        {date:'2014-08-12T00:00:00'},
        {date:'2014-08-12T01:00:00'},
        {date:'2014-08-12T05:00:00'},
        {date:'2014-08-12T09:00:00'},
        {date:'2014-08-11T14:00:00'},
        {date:'2014-08-11T18:30:00'},
        {date:'2014-08-11T13:00:00'}];

function SortandFilterPlayTimes (allPlayTimes) {
    var filteredPlayTimes = [];
    $.each(allPlayTimes, function(index, value) {
        var date = new Date(value.date);

        if ($.inArray(date,filteredPlayTimes) === -1) {
            filteredPlayTimes.push(date);
        }
    });
};

Why is JavaScript always adding this +2 hours ?


回答1:


You're using the ISO-8601 formatting of dates while omitting the timezone, this makes the parsing consider the timezone as UTC in ES5 (this will be different in ES6 : strings in ISO format will be considered as local too when the timezone isn't provided).

If you want the date to be parsed with your local timezone in ES5, you might change the format to a not ISO one :

var date = new Date(value.date.replace(/T/,' '));

But you might also want to check you really want the date to be parsed depending on the user's timezone, this is most often a bad idea. The usual good solution is to send the timezone or to send the date as a unix timestamp (what you get with date.getTime()).




回答2:


You are parsing ISO-8601 timestamps without timezone information, thus a UTC timezone is assumed, but Date.prototype.toString() will provide a string representation of this timestamp in your current timezone which means that if you are in the UTC+2 timezone you will notice a shift by two hours.




回答3:


I'm guessing your project is hosted on a server that has a +2 hours time difference with your local system, thus giving you a time you are not expecting. Is your server in a different country?



来源:https://stackoverflow.com/questions/25309434/date-parsed-with-gmt-2-hours

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!