2014-10-18 9 views
2

У меня есть требование, чтобы преобразовать местное время времени UTC на основе пользовательского часового поясаКак преобразовать время UTC в местное время Javascript

У меня есть два параметра время ИТСА и пользователи часовых пояса в виде строки

т.е. 0,1,2,3 ... 12 (часовой пояс) 0, -1, -2, -3 ...- 12 (часовой пояс)

var utc = "2014-10-18T06:14:41.512Z" 
tz = 5.5(Indian Standard Time) 

Ожидаемый результат Сб 18 октября 2014 11:44 : 28 GMT + 0530

Я попытался минутный расслоения плотной

moment("2014-10-18T06:14:41.512Z").zone('+05:30').format('YYYY-MM-DD HH:mm') 

и результат является правильным.

Но когда я изменить часовой пояс на другой он не показывает, как ожидаемый результат попытался

moment("2014-10-18T06:14:41.512Z").zone('+12:00').format('YYYY-MM-DD HH:mm') 

результата "2014-10-18 18:14" Ожидаемое 2014-10-18 19: 18

12 - часовой пояс NewZeland. Пожалуйста, помогите мне решить эту проблему. Спасибо

ответ

2

Проверить это

var date = new Date('2014-10-19 17:00:34 UTC'); 
date.toString(); 


var timezone = "America/New_York"; 
var utcDate = "2014-10-19T10:31:59.0537721Z"; 

var localDate = moment.utc(utcDate).tz(timezone).format() 

Также проверьте

http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/

+0

спасибо, но я делаю это в стороне сервера. У меня есть часовой пояс в моей руке, есть ли способ конвертировать его на стороне сервера, используя moment.js – Dibish

+0

@ Dibish Обновленный чек - это работа для вас –

+0

Спасибо, но я не знаю зону, то есть «Америка/Нью-Йорк». У меня есть только номер зоны, например, 5.5 для +05: 30 – Dibish

1

Временная зона является не смещение. Смещение составляет только часть часового пояса. Многие часовые пояса чередуются между двумя различными смещениями для учета daylight saving time. Часовой пояс должен учитывать это, включая конкретные даты и время начала и окончания летнего времени, а также любую историю изменений, которые могли иметь временные зоны.

Случай Новой Зеландии, который вы дали, является прекрасным примером. Вы сказали: «12 - часовой пояс Новой Зеландии», и поэтому ожидается, что с New Zealand is in DST for that date, что переход с 6:14 по UTC в новозеландское время будет 19:14. - 13 часов спустя.

Но 12 не полностью представляют Новую Зеландию. Это всего лишь 12-часовое смещение от UTC. Есть много других часовых поясов, которые используют одинаковое смещение по-разному. Например, Маршалловы острова используют UTC + 12-летний круг, без летнее время.

Вы действительно должны прочитать the timezone tag wiki - особенно раздел «Часовой пояс! = Смещение».

Вместо смещений вы должны представлять часовые пояса с их полным идентификатором IANA от tz database. Например, Восточное время США - "America/New_York", Индийское время - "Asia/Kolkata", а Новой Зеландии - "Pacific/Auckland". Вы можете найти более подробную информацию о the list on Wikipedia.

Вы можете использовать moment-timezone для работы с ними в JavaScript.

moment("2014-10-18T06:14:41.512Z").tz('Pacific/Auckland').format('YYYY-MM-DD HH:mm') 

// Output: "2014-10-18 19:14" 

Я также охватывают эти темы подробно в моем Date and Time Fundamentals курсе по Pluralsight.com.

+0

Все хорошие моменты. Часовые пояса - это больше, чем смещения. Брисбен и Сидней находятся в одной долготе, но в Сиднее есть DST, а Брисбен - нет. Таким образом, мы остаемся +10 круглый год, они колеблются между +10 и +11. –

2

придерживаться международных стандартов, необходимо отформатировать дату в формате UTC, включив в него time delimiter T, и zone designator Z.

Z является часовой пояс обозначения для г Эро UTC смещения аки Z времени Улы. Подробнее о размере International Date Standard ISO8601here.

После того, как вы соответствовали международным стандартам, кросс-браузер дружественный подход прост:

new Date('2014-10-19T17:00:34Z'); 
// Sun Oct 19 2014 12:00:34 GMT-0500 (Central Daylight Time) 
Смежные вопросы