moment.js를 사용하여 날짜를 UTC로 변환


95

아마도 이것에 대한 쉬운 대답이지만 moment.js가 UTC 날짜 시간을 밀리 초 단위로 반환하도록하는 방법을 찾지 못하는 것 같습니다. 내가하는 일은 다음과 같습니다.

var date = $("#txt-date").val(),
    expires = moment.utc(date);

내가 뭘 잘못하고 있는지 아십니까?

답변:


101

이것은 문서에서 찾을 수 있습니다 . 순간과 같은 라이브러리로 문서 전체를 읽으시기 바랍니다. 그건 정말 중요합니다.

입력 텍스트가 사용자의 현지 시간으로 입력되었다고 가정합니다.

 var expires = moment(date).valueOf();

사용자가 실제로 UTC 날짜 / 시간을 입력하도록 지시받은 경우 :

 var expires = moment.utc(date).valueOf();

22
편집 됨- "쉽게"제거되었습니다. :)
Matt Johnson-Pint

6
시간대가있는 순간 날짜-시간이 이미있는 경우이를 UTC로 어떻게 변환 할 수 있습니까?
ア レ ッ ク ス

@Alexander -.utc()
매트 존슨 - 파인트

2
작동하지 않습니다. 그것은 날짜 자체가 아니라 날짜에 사용 된 방법 만 변경합니다.
Colleen

2
@Colleen-예, 그러나 일반적으로 .format()UTC 값을 방출 하는와 같은 메소드 중 하나를 호출 합니다. 그것은 할 수없는 A가 있기 때문에, 내부 날짜 값 자체를 변경 Date이미 UTC 타임 스탬프를 추적한다. UTC 또는 현지 시간을 내보낼 지 여부를 결정하는 것은 항상 호출되는 메서드뿐입니다. 그 점에서 순간은 동일합니다.
Matt Johnson-Pint

53

이 방법을 사용하면 작동합니다. ValueOf는 나를 위해 작동하지 않습니다.

moment.utc(yourDate).format()

2
이것은 문서에 따라 작동합니다. 현지 시간을 UTC로 변환합니다.
Kishor Pawar

1
여기에 뭔가 수상한 것이 있습니다. moment.js 버전을 사용하고 있습니다. 2.17.1 그리고 'yourdate'가 '2017-10-14T21 : 00 : 00Z'(en-us)이면 위의 스 니펫은 정확히 일치하지 않는 '2017-10-14T21 : 00 : 00Z'결과를 반환합니다. 내가 gmt + 3에 있기 때문에 utc. 올바른 결과는 '2017-10-15T00 : 00 : 00 + 03 : 00'이며 'moment (yourDate) .format ()'을 통해 얻을 수 있습니다.
XDS

14

현재 : moment.js version 2.24.0

로컬 날짜 입력 있다고 가정하면 dateTime 또는 Time 입력을 UTC 로 변환 하는 적절한 방법입니다 .

var utcStart = new moment("09:00", "HH:mm").utc();

또는 날짜를 지정하는 경우

var utcStart = new moment("2019-06-24T09:00", "YYYY-MM-DDTHH:mm").utc();

보시다시피 결과 출력은 UTC로 반환됩니다.

//You can call the format() that will return your UTC date in a string 
 utcStart.format(); 
//Result : 2019-06-24T13:00:00 

그러나 아래와 같이 하면 UTC로 변환 되지 않습니다 .

var myTime = new moment.utc("09:00", "HH:mm"); 

입력을 utc 시간으로 만 설정하는 것입니다. 마치 myTime이 UTC에 있다고 언급하는 것과 같습니다. 출력은 9:00입니다.


3
moment.utc(date).format(...); 

갈 길입니다.

moment().utc(date).format(...);

이상하게 행동합니까 ...


1
의 이상한 행동을 자세히 설명해 주 moment().utc(date).format(...)시겠습니까?
Freeman Lambda

2
행동은 이상하지 않고 다른 방법입니다. 첫 번째는 moment.utc(date)위한 구문 분석date. 두 번째 moment().utc(date)는 현재 시간 ( ) 을 조작 하기 위한 것이며이 경우 매개 변수를 기대하지 않기 때문에 매개 변수는 쓸모 가 없습니다. moment()date.utc()
CodingHamster

2

이것은 나를 위해 일했습니다. 다른 사람들은 유용하다고 생각할 수 있습니다.

// date = 2020-08-31T00 : 00 : 00Z 저는 덴마크에 있습니다 (시간대는 +2 시간).

moment.utc (moment (date) .utc ()). format () // 2020-08-30T22 : 00 : 00Z 반환


1

다른 모든 것이 실패하면 로컬 오프셋의 역으로 ​​다시 초기화하십시오.

var timestamp = new Date();
var inverseOffset = moment(timestamp).utcOffset() * -1;
timestamp = moment().utcOffset( inverseOffset  );

timestamp.toISOString(); // This should give you the accurate UTC equivalent.

이것은 작동하지 않습니다. 어떤 것은 작품은 설정입니다 않습니다 keepOffset같이 true로 매개 변수를 moment(timestamp).toISOString(true),
크리스 헤인즈

1

여기에서는 날짜 개체를 전달하고 UTC 시간으로 변환합니다.

$.fn.convertTimeToUTC = function (convertTime) {
   if($(this).isObject(convertTime)) {
        return moment.tz(convertTime.format("Y-MM-DD HH:mm:ss"), moment.tz.guess()).utc().format("Y-MM-DD HH:mm:ss");
    }
};
// Returns if a value is an object
$.fn.isObject =  function(value) {
    return value && typeof value === 'object';
};


//you can call it as below
$(this).convertTimeToUTC(date);

1

이것이 답이 될 것입니다.

moment.utc(moment(localdate)).format()
localdate = '2020-01-01 12:00:00'

moment(localdate)
//Moment<2020-01-01T12:00:00+08:00>

moment.utc(moment(localdate)).format()
//2020-01-01T04:00:00Z

0

여기서 moment.js 문서를 읽어 보세요 . 아래 예제와 출력을 참조하여 GMT 시간을 현지 시간 (내 영역은 IST)으로 변환 한 다음 현지 시간을 GMT로 변환합니다.

// convert GMT to local time
console.log('Server time:' + data[i].locationServerTime)
let serv_utc = moment.utc(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment(serv_utc,"YYYY-MM-DD HH:mm:ss").tz(self.zone_name).format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to local time:' + data[i].locationServerTime)

// convert local time to GMT
console.log('local time:' + data[i].locationServerTime)
let serv_utc = moment(data[i].locationServerTime, "YYYY-MM-DD HH:mm:ss").toDate();
console.log('serv_utc:' + serv_utc)
data[i].locationServerTime = moment.utc(serv_utc,"YYYY-MM-DD HH:mm:ss").format("YYYY-MM-DD HH:mm:ss");
console.log('Converted to server time:' + data[i].locationServerTime)

출력은

Server time:2019-12-19 09:28:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to local time:2019-12-19 14:58:13
local time:2019-12-19 14:58:13
serv_utc:Thu Dec 19 2019 14:58:13 GMT+0530 (India Standard Time)
Converted to server time:2019-12-19 09:28:13

-1

밀리 초를 비교하고 검색 할 무언가가 필요하지 않습니까?

예를 들면 :

let enteredDate = $("#txt-date").val(); // get the date entered in the input
let expires = moment.utc(enteredDate); // convert it into UTC

이를 통해 만료 날짜가 UTC로 표시됩니다. 이제 UTC로 "지금"날짜를 얻고 비교할 수 있습니다.

var rightNowUTC = moment.utc(); // get this moment in UTC based on browser
let duration = moment.duration(rightNowUTC.diff(expires)); // get the diff
let remainingTimeInMls = duration.asMilliseconds();

moment.valueOf()(new Date()).getTime()1970년 1월 1일 UTC (이것은 표준이기) 때문에 모두 반환 밀리 초
Drenai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.