2015-12-10 2 views
0

Я имею дату UTC в следующем формате: 2015-12-09T15:44:33.737UTC ISO8601 дата определенного формата с местным временем

В настоящее время я делаю

var ts = '2015-12-09T15:44:33.737' 

var localTimeString = new Date(ts).toLocaleDateString() + ", " + new Date(ts).toTimeString(); 

Смотрите здесь: http://jsbin.com/pakoxegete/1/edit?js,console

получить 12/9/2015, 10:44:33 GMT-0500 (Eastern Standard Time)

Но формат я хотел бы это

12/09/2015, 10:44:33 AM EST

Основные изменения после того, как я есть возможность перейти от военного времени на зимнее время с AM/PM, а также, чтобы иметь возможность конвертировать GMT-0500 (Eastern Standard Time) в EST. Часовые пояса должны работать только для основных часовых поясов, расположенных в США.

Edit: Я заинтересован в PST, MST, CST, EST и их дневные счетчике части: PDT, MDT, CDT, EDT

+0

Не разбора строк с Date.parse. Ваш формат будет рассматриваться как локальный в хостах ECMAScript 2015, UTC на хостах ES5 и что-либо на более ранних хостах (например, NaN в IE 8). Ручной анализ строки (используйте библиотеку или простую функцию). Строка '12/09/2015, 10:44:33 AM EST' неоднозначна как для компонента день/месяц (12 сентября или 9 декабря?), Так и для части часового пояса (есть три часовых пояса EST). – RobG

+0

Типичный формат США месяца/дня/года. Я знаю только два восточных часовых поясов EST и EDT, но я заинтересован в 'PST, MST, CST, est' и их дневный счетчик частях:' PDT, MDT, CDT, EDT' – LearningJrDev

+0

К сожалению, Интернет не только для США и подавляющее большинство населения мира не используют своеобразный формат США. Там нет стандартного для временных сокращений зоны, Википедия в настоящее время перечислена [* два ЭЕТ *] (https://en.wikipedia.org/wiki/List_of_time_zone_abbreviations), но используется для перечисления 3. – RobG

ответ

0

Я предполагаю, что функции имеют больше возможностей, что я ожидал. Был в состоянии пойти на компромисс и получить этот

var ts = '2015-12-09T15:44:33.737' 

var options = { year: 'numeric', month: 'long', day: 'numeric', hour: '2-digit', minute: '2-digit', timeZoneName: 'short' }; 
console.log(new Date(ts).toLocaleDateString('en-US', options)); 

что приводит к December 9, 2015, 10:44 AM EST

+1

Вы должны попробовать, что более чем в браузере. Форматирование строк даты не является частью спецификации языка ECMAScript. Это часть [* API интернационализации EMCAScript *) (http://www.ecma-international.org/ecma-402/1.0/), но это [* не поддерживается всеми браузерами *] (https: // разработчик .mozilla.org/о/Docs/Web/JavaScript/Справка/Global_Objects/международная). – RobG

+0

RobG прав о поддержке браузера. Если вы обнаружите, что делаете много форматирования даты, важно учитывать момент.js. Это была находка, ожидая поддержки Intl. – Jack

+0

@Jack Я использую moment.js в настоящее время, но они опустили поддержку часового пояса в пользу своего нового сценария часового пояса. Можно ли добиться того же эффекта, который у меня выше, используя только moment.js? – LearningJrDev

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