Дата разбирается с gmt + 2 часа
Я всегда получаю неправильную дату, когда использую var date = new Date(timestring)
всегда есть +2 часа по Гринвичу.
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);
}
});
};
Почему JavaScript всегда добавляет это +2 часа?
3 ответа
Вы используете форматирование даты в ISO-8601, опуская часовой пояс, поэтому в ES5 при синтаксическом анализе рассматривается часовой пояс как UTC (в ES6 это будет иначе: строки в формате ISO также будут считаться локальными, когда часовой пояс не т при условии).
Если вы хотите, чтобы дата была проанализирована с вашим местным часовым поясом в ES5, вы можете изменить формат на не ISO:
var date = new Date(value.date.replace(/T/,' '));
Но вы также можете проверить, действительно ли вы хотите, чтобы дата анализировалась в зависимости от часового пояса пользователя, это чаще всего плохая идея. Обычно хорошим решением является отправка часового пояса или отправка даты в виде метки времени Unix (что вы получаете с date.getTime()
).
Вы анализируете временные метки ISO-8601 без информации о часовом поясе, поэтому часовой пояс UTC предполагается, но Date.prototype.toString()
предоставит строковое представление этой временной метки в вашем текущем часовом поясе, что означает, что если вы находитесь в часовом поясе UTC+2, вы заметите сдвиг на два часа.
Я предполагаю, что ваш проект размещен на сервере, который имеет разницу во времени +2 часа с вашей локальной системой, что дает вам время, которое вы не ожидаете. Ваш сервер находится в другой стране?