2013-10-26 2 views
0
xdate: 2013-10-26 = 
Fri Oct 25 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: Oct 26, 2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: 10/26/2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

xdate: Oct. 26, 2013 = 
Sat Oct 26 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

Когда я создаю дату в JavaScript с использованием нового Date (xdate) с вышеприведенными строками, они все, кажется, работает хорошо для гггг-мм-дд, который выходит за исключением до 8 вечера ночью. К сожалению, это формат, созданный по типу HTML5 = дата. Любой способ иметь эту строку также создать нормальную дату.Javascript новые Дата выхода с 8 вечера предыдущего дня

Я думаю, мой вопрос больше: ПОЧЕМУ этот формат создает дату, которая составляет 4 часа. Я создаю дату с использованием 2013-10-26, затем создаю getDate и получаю 25-е. это кажется неправильным !!

ответ

1

выходит 8PM в ночь перед

Нет, ваша даты и времени не выходит на 8PM ночью. Обратите внимание, что дата, которую вы создаете, - это дата UTC. Причина, по которой вы видите это, потому что ваш местный часовой пояс за 4 часа до UTC (GMT-4). Вот только презентация на дату рассчитывается на основе локального часового пояса, внутри, время дата представлено числом милисекунд поскольку 01/01/1970 00:00:00 UTC.

Вы можете получить внутреннее представление даты, используя Date.getTime(), который будет возвращать одинаковое значение во всех часовых поясах. Например, с:

var date = new Date("2013-10-26"); 
  • Когда местный часовой пояс GMT-4: Вы увидите презентацию является: Fri Oct 25 2013 20:00:00 GMT-0400

  • Когда местный часовой пояс GMT + 7. Вы увидите: Sat Oct 26 2013 07:00:00 GMT+0700

Но date.getTime() возвращает то же значение. Это то значение, о котором вы должны заботиться.

0

Вы можете создавать свои данные, как это и избежать этого timeone offset вопроса:

xdate = '2013-10-26'; 
var date = new Date(xdate.replace(/-/g, ',')); 

Тестирования:

var d1 = new Date(xdate); // Fri Oct 25 2013 20:00:00 GMT-0400 (EDT) 

var d2 = new Date(xdate.replace(/-/g, ',')); // Sat Oct 26 2013 00:00:00 GMT-0400 (EDT) 

разницу Обратите внимание на значении даты между d1 и d2.

d2 показывает правильное значение Oct 26 2013 из-за этого - до , замен.

+0

это создаст тот же результат, что и дата, все еще созданная в UTC http://jsfiddle.net/gURGG/. Попробуйте в местном часовом поясе. –

+0

@KhanhTO: Я добавил ** Тестирование ** выше, чтобы вы могли видеть разницу между двумя выходами. – anubhava

+0

@KhanhTO: Ваш [jsfiddle] (http://jsfiddle.net/gURGG/1/) также показывает две разные даты. 1-й с заменой: «Сб. 26 октября 2013 00:00:00 GMT-0400 (EDT)», но второй с дефолтом: «Пт. 25 октября 2013 20:00:00 GMT-0400 (EDT)», который проверяет мои результат. – anubhava

Смежные вопросы