Moment.js 날짜를 사용자 현지 시간대로 변환하는 방법은 무엇입니까?


84

Moment.js 및 Moment-Timezone 프레임 워크를 사용하고 UTC 시간대로 명시 적으로 표시되는 Moment.js 날짜 개체가 있습니다. 브라우저의 현재 시간대로 어떻게 변환 할 수 있습니까?

var testDateUtc = moment.tz("2015-01-30 10:00:00", "UTC"); var localDate = ???

따라서 사용자의 현지 시간대를 알 수 있다면 괜찮을 것입니다. 또는 실제로 날짜에 관계없이 "현지 시간대"를 사용하는 다른 데이터 개체로 날짜 개체를 변환하고 싶습니다.

답변:


139

이를 위해 순간 시간대를 사용할 필요가 없습니다. 주요 moment.js 라이브러리에는 UTC 및 현지 시간대 작업을위한 모든 기능이 있습니다.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).local();

여기에서 기대할 수있는 모든 기능을 사용할 수 있습니다.

var s = localDate.format("YYYY-MM-DD HH:mm:ss");
var d = localDate.toDate();
// etc...

전달하여 유의 testDateUtcA는 어떤 moment개체는 다시 moment()생성자, 그것이 생성 클론 . 그렇지 않으면를 호출 .local()하면 testDateUtc값 대신 값 도 변경 됩니다 localDate. 순간은 변경 가능 합니다.

또한 원래의 입력이 포함 된 경우 시간대는 오프셋 (offset) 참고 +00:00또는 Z, 당신은 단지와 직접 구문 분석 할 수 있습니다 moment. .utc또는 을 사용할 필요가 없습니다 .local. 예를 들면 :

var localDate = moment("2015-01-30T10:00:00Z");

4
이 방법은 계정에 DST 오프셋을 고려하지 않는다는 것을 알고 있어야합니다, 그것은 사용에 안전합니다 moment-timezone라이브러리
제이미 Agudo

2
@Jaime 사실이 아닙니다. local실제로 DST를 고려합니다.
Matt Johnson-Pint

예를 들어에서 EST로 번역하는 등 직접 확인할 수 있습니다 . CET원하는 경우 내일 예를 넣겠습니다 NY.-> Madrid. 나는 반례 : 동의합니다
제이미 Agudo

1
당신은 그 순간이 순간 시간대 없이는 그런 유형의 변환을 할 수 없다는 것이 맞습니다. 그러나 OP가 요청한 UTC와 로컬간에 올바르게 변환 할 수 있습니다 .
Matt Johnson-Pint

2
로컬 규칙은 브라우저에서 가져옵니다. 현지 시간대에 DST가 포함되어있는 한 moment는이를 사용합니다.
Matt Johnson-Pint

23
var dateFormat = 'YYYY-DD-MM HH:mm:ss';
var testDateUtc = moment.utc('2015-01-30 10:00:00');
var localDate = testDateUtc.local();
console.log(localDate.format(dateFormat)); // 2015-30-01 02:00:00
  1. 날짜 형식을 정의하십시오.
  2. moment 객체를 만들고 객체에서 UTC 플래그를 true로 설정합니다.
  3. 원래 모멘트 객체에서 변환 된 현지화 된 모멘트 객체를 만듭니다.
  4. 현지화 된 순간 객체에서 형식화 된 문자열을 반환합니다.

참조 : http://momentjs.com/docs/#/manipulating/local/


이 답변은 문서에 대한 참조와 함께 작동하는 이유를 설명하면 더 좋을 것입니다. 또한,이 대답 월에 게시 한 ... 다른 방법을 설명 할 수 있습니다
이교도 원숭이

@AndrewHenderson, 시간이 로컬 시스템 시간보다 한 시간 빠릅니다.
Ramesh Papaganti 2014

@RameshPapaganti 아마 일광 절약? 예를 들어 PDT 대 PST. Moment는 특히 현지화와 관련하여 버전간에 API를 변경하는 것으로 알려져 있습니다. 원인을 찾으면 알려주세요.
AndrewHenderson apr

6

내가 한 일은 다음과 같습니다.

var timestamp = moment.unix({{ time }});
var utcOffset = moment().utcOffset();
var local_time = timestamp.add(utcOffset, "minutes");
var dateString = local_time.fromNow();

{{ time }}utc 타임 스탬프는 어디에 있습니까 ?


3

utcOffset 함수를 사용하십시오.

var testDateUtc = moment.utc("2015-01-30 10:00:00");
var localDate = moment(testDateUtc).utcOffset(10 * 60); //set timezone offset in minutes
console.log(localDate.format()); //2015-01-30T20:00:00+10:00
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.