당신은 아주 쉽게 순간 시간대 안정적으로 현지 시간으로 변환 할 수 있습니다 :
이
var original = moment.tz('2017-12-23T09:00:00', 'America/Los_Angeles');
var easternUS = original.clone().tz('America/New_York');
var centralEU = original.clone().tz('Europe/Berlin');
var westAUS = original.clone().tz('Australia/Perth');
var japan = original.clone().tz('Asia/Tokyo');
// etc.
(사용 .format(...)
원하는 출력 문자열을 생성 할 수 있습니다.)
을 당신은 쉽게 시간 한 시간 계산할 수 있습니다 이전의 모멘트 함수로 초기에.
var earlierUTC = original.clone().utc().subtract(1, 'hour');
var earlierEastern = easternUS.clone().subtract(1, 'hour');
예, 당신이 볼 수 있듯이, 당신은 저장 할 필요가 2017-12-23T09:00:00
및 America/Los_Angeles
입니다.
하나는 2017-12-23T09:00:00-08:00
등의 오프셋으로 이벤트 시간을 저장하는 것이 좋습니다,하지만 당신은 거기에 몇 가지 문제로 실행 : 이벤트가 매달 다시 발생
경우는 어떻게? 3 월에 DST가 시작되면 현지 시간을 오전 9 시로 유지하고 오프셋을 -7로 변경할지 또는 원래 의도가 현지 시간을 이동시키는 등가 UTC 시간 (17 : 00Z)인지 여부를 결정해야합니다 ~ 10am.
정치인이 이벤트가 발생하기 전에 시간대 또는 DST 규칙을 변경하면 어떻게 될까요? 올해 캘리포니아에서는 그렇지 않을 것으로 보이지만, 글로벌 차원에서 약간의 규칙 성을 갖고 단기간에 발생합니다. 내 블로그 게시물 On the Timing of Time Zone Changes을 참조하십시오.캘리포니아에서도 - 여름에 열리는 연례 행사 였지만, like this one 법안이 통과되었다고 말하면 오프셋이 잘못 될 수 있습니다.
생각해 봐야 할 점이 하나 있습니다. 이벤트 현지 시간이 유효하지 않거나 모호한 경우 어떻게합니까?
유효하지 않은 시간은 스프링 전달 전환에서 발생합니다. 예를 들어, 시계는 1시 59 분에서 3 시로 이동하지만 2시 30 분의 이벤트 시간을가집니다. 단일 이벤트에서는 가능하지 않지만 반복되는 이벤트에서는 쉽게 발생할 수 있습니다. 어떻게 처리할지 결정해야하지만 확실하지 않으면 현지 시간을 격차만큼 앞당길 것을 제안합니다. 그래서 이벤트는 그 날 3시 30 분에있을 것이고, 다음 발생시 2시 30 분으로 돌아갈 것입니다.
불투명 한 시간은 폴백 전환에서 발생합니다. 예를 들어 시계는 1:59에서 1:00로 이동합니다. 이벤트가 1:30에 실행되면 첫 번째 인스턴스에서 실행할지, 두 번째 인스턴스에서 실행할지 또는 둘 다에서 실행할지 결정해야합니다. 대부분의 경우 첫 번째 인스턴스 (표준 시간이 아닌 일광 절약 시간)로 실행하는 것이 좋습니다.
이벤트가 실제로 한 번만 실행되고 폴백 전환 중에있을 수있는 경우 이벤트 시간을 UTC 또는 오프셋이있는 로컬 시간으로 기록하여 명확하게하는 것이 좋습니다. 앞서 언급 한대로 표준 시간대 규칙의 변경 사항을 조심하십시오. 당신이 그것에 대해 걱정할 필요가 없습니다 - 당신이 이탈 할 이유가없는 있도록
순간-시간대가 자동으로 그 변환하는 동안 위의 제안을 적용합니다.
감사합니다 매트, 그리고 여기있는 동안 지난 며칠 동안 읽은이 주제에 대해 다른 답변을 보내 주셔서 감사합니다! – Clark