2017-01-19 2 views
0

Я получаю дату сервера (включая часовой пояс) из API. Я хочу преобразовать его в объект даты.Javascript дает недопустимую дату

Когда я делаю это

var demo2 = new Date("THU JAN 19 15:37:56 PST 2017"); //It works! 

var demo = new Date("FRI JAN 20 07:50:07 SGT 2017"); //Invalid date 

Почему? Если это SGT то не работает, но это работает для PST

Я пытаюсь передать эту дату в DateTimePicker

$datetimepicker.datetimepicker({ 
     minDate: new Date(this.serverTime), 
     defaultDate: new Date(this.serverTime), 
    }); 

Как я могу решить эту проблему, используя Дата/MomentJS?

+1

У вас нет часового пояса. У вас есть несколько букв, которые могут относиться к аббревиатуре одной из нескольких часовых поясов времени. Если ваша строка с вашего сервера действительно такая - вы должны вернуться на свой сервер и исправить действительный вывод, предпочтительно в формате ISO8601. –

ответ

-1

ли вы попробовать использовать этот формат:

new Date('1/20/2017 7:50:07 AM CST'); 

CST тот же часовой пояс, чем SGT

+1

Большинство браузеров интерпретируют «CST» как центральное стандартное время в США, а не как стандартное время в Китае. Только не надо. –

0

Если вы используете MomentJS конструктор предложить вы можете сделать что-то вроде этого. (Date String, Date Format, TimeZone)

Вы можете найти часовой пояс строки здесь: http://momentjs.com/timezone/

В вашем случае вы ищете Сингапур, который является: Asia/Singapore

Простой пример:

var date = moment.tz("Jay 20th 2017 8PM", "MMM Do YYYY hA", "Asia/Singapore"); 

Вот ссылка на конструктор docs: http://momentjs.com/timezone/docs/

1

В общем, вы никогда не должны разбирать сокращения времени. В лучшем случае они непоследовательны и часто неоднозначны.

Например, если CST значит ...

  • Central Standard Time (UTC-6)
  • Куба Стандартное время (UTC-5)
  • China Standard Time (UTC + 8)

Нужно ли говорить больше?

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