2013-09-01 3 views
0

Я получаю значение даты обратно из запроса AJAX, который выглядит, как не следующее:Почему Javascript меняет мою дату?

"2013-08-08T00:00:00" 

Ну, это не хорошо, так что я анализирую только дата:

mydate = mydate.substring(0,10); 

Который дает мне:

"2013-08-08" 

Отлично, теперь я просто сделать это реальная дата:

mydate = new Date(mydate.substring(0,10)) 

И получите:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 

Ха? Почему я потерял один день?

+2

Знаете ли вы, что такое часовые пояса? И вы не потеряли месяц. Это был август, и он оставался в августе. – ZenMaster

+0

Моя локальная машина включена (UTC-05: 00) Восточное время (США и Канада) – Coltech

+2

Который, вероятно, переводится в GMT-0400, а переход на летнее время не применяется. – ZenMaster

ответ

2

У вас есть интересная ситуация здесь на самом деле, это вызвано тем, что при создании объекта Date, если вы не указали смещение часового пояса, он предполагает, что ваш ввод даты находится в UTC, а затем преобразует его. Это связано только с тем, что вы указали свое значение с помощью «-» вместо «/»

EDIT: Исправление. Я полагаю, что ваша дата может быть принята за UTC, а затем преобразована в соответствующее время EDT. Это объясняет, почему установка точно значений или использование '/' возвращает другой результат. «/», вероятно, обозначает время EDT, а «-» обозначает время UTC.

См:

var asString = "2013-08-08T00:00:00" var mydate = 
asString.substring(0,10); 

var cDate1 = new Date(mydate); 

var cDate2 = new Date(mydate.replace('-', '/')); 

var asSplit = mydate.split('-'); 
var cDate3 = new Date(asSplit); 

alert(cDate1 + "\n" + cDate2 + "\n" + cDate3); 

Который производит следующее:

Wed Aug 07 2013 20:00:00 GMT-0400 (Eastern Daylight Time) 
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 
Thu Aug 08 2013 00:00:00 GMT-0400 (Eastern Daylight Time) 

Где случаи:

  • Стандартный
  • Заменить '-' с '/'
  • Отделить в год/месяц/день

Вы можете увидеть его в действии here

EDIT: Отмеченный ошибка указал loxxy

+0

GMT совпадает с UTC. –

+0

Упс. означало EDT не GMT – jrbeverly

0

Я бы предложил сделать это 2013,08,08 вместо кажется, что это не нравится дефисов

http://www.w3schools.com/jsref/jsref_obj_date.asp

Дата объект принимает

var d = new Date(year, month, day, hours, minutes, seconds, milliseconds);

0

Это должно работать:

new Date("2013-08-08".split("-")) 

Так, в вашем случае:

new Date(mydate.substring(0,10).split("-")) 
Смежные вопросы