Я использую момент.Мне нужно, чтобы пользователи вводили дату, и чтобы в Австралии / Перте всегда было время, независимо от того, какой браузер установлен.Например, предположим, что для компьютера установлено сиднейское время (которое сейчас равно +3, а зимой - +2).Я хочу, чтобы пользователь ввел дату / время и удостоверился, что эта дата / время хранится как время Перта.
Обратите внимание, что визуализация правильная дата не является проблемой (сmoment.tz
).Что меня беспокоит, так это создание объекта даты, которое должно произойти, предоставляя время и заставляя браузер делать вид, что они находятся в этом часовом поясе.
Мне нужно, чтобы это работало независимо от перехода на летнее время и т. Д.
ОБНОВЛЕНИЕ : это то, чего я хочу добиться:
// MY CURRENT TIMEZONE IS SYDNEY, CURRENTLY PERTH + 3 BUT +2 IN SUMMER
// IN PERTH IT's 10:11AM, and *THAT* is the time I am interested in
// storing, not 13:11:58
var d = new Date()
// => Wed Nov 28 2018 13:11:58 GMT+1100 (Australian Eastern Daylight Time)
// NOTE: the date 13:11:58 SYDNEY time. I don't want this.
// I MUST pretend that users entered the date with their timezone
// is in Perth
// So...
// Create a date string that exclude original timezone and includes new timezone
perthDateString = moment(new Date()).format('YYYY-MM-DDTHH:MM:ss') + '+0800'
// => "2018-11-28T13:11:58+0800"
// Make a new date object using the tinkered date string
var newD = new Date(perthDateString)
// Display the date. Note: the time is "wrong" (since it displays
// a time that is 3 hours ahead), but it's actually the correct
// answer since 'd' is meant to be Perth time in the first place
newD
// => Wed Nov 28 2018 16:11:58 GMT+1100 (Australian Eastern Daylight Time)
// Display the date as the Perth time
moment.tz(newD, 'Australia/Perth').toString()
// => "Wed Nov 28 2018 13:11:58 GMT+0800"
Однако:
в perthDateString = moment(new Date()).format('YYYY-MM-DDTHH:MM:ss') + '+0800'
,Я хотел бы указать Australia/Perth
, а не '+0800'
Мне неловко работать с датами, обрезая / объединяя строки
Интересно, сможет ли КАЖДЫЙ браузер проанализировать дату, возвращаемую .format('YYYY-MM-DDTHH:MM:ss') + '+0800'
, или у меня будут сюрпризы, особенно когда / если у меня есть решение, чтобы я использовал Australia/Perth
вместо