program tip

momentjs를 사용하여 날짜를 epoch로 변환 한 다음 다시 날짜로 변환

radiobox 2021. 1. 10. 17:03
반응형

momentjs를 사용하여 날짜를 epoch로 변환 한 다음 다시 날짜로 변환


날짜 문자열을 epoch로 변환 한 다음 epoch를 날짜 문자열로 다시 변환하여 올바른 날짜 문자열을 제공하고 있는지 확인하려고합니다.

var epoch = moment("10/15/2014 9:00").unix(); // do I need to do .local()?
var momentDate = moment(epoch); // I've also tried moment.utc(epoch) 
var momentDateStr = momentDate.calendar();
alert("Values are: epoch = " + epoch + ", momentDateStr = " + momentDateStr);

렌더링

Values are: epoch = 1413378000, momentDateStr = 01/17/1970

참고 : 다음 버전의 moment js 스크립트를 사용하고 있습니다. //cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment-with-locales.js


여기에 몇 가지 잘못된 점이 있습니다.

  • 첫째, 용어입니다. "에포크" 는 무언가의 시작점을 의미합니다. "Unix Epoch"는 1970 년 1 월 1 일 자정 (UTC)입니다. 임의의 "날짜 문자열을 epoch로"변환 할 수 없습니다. 아마도 "유닉스 타임"을 의미했을 것인데 , 종종 "에포크 타임"이라고 잘못 부르기도합니다.

  • .unix()전체 초 단위의 Unix 시간을 반환하지만 기본 moment생성자는 밀리 초 단위 의 타임 스탬프를 허용합니다 . 대신 .valueOf()밀리 초를 반환 하는 데 사용해야 합니다. 호출 .unix()*1000도 작동하지만 정밀도가 떨어질 수 있습니다.

  • 형식 지정자를 제공하지 않고 문자열을 구문 분석합니다. 2014 년 1 월 1 일과 같은 값은 코드가 실행되는 로케일에 따라 2 월 1 일 또는 1 월 2 일로 해석 될 수 있으므로 이는 좋은 생각이 아닙니다. (이것이 콘솔에 지원 중단 경고가 표시되는 이유이기도합니다.) 대신 다음 과 같이 예상 입력과 일치 하는 형식 문자열제공하십시오 .

    moment("10/15/2014 9:00", "M/D/YYYY H:mm")
    
  • .calendar()매우 특정한 용도가 있습니다. 날짜가 가까워지면 "Today 9:00 AM"과 같은 값이 반환됩니다. 예상 한 결과가 아니라면 .format()대신 함수를 사용해야합니다 . 다시 말하지만, 형식 지정자를 전달할 수 있습니다.

  • 의견에 대한 질문에 대답하려면 아니요 . .local()또는 으로 전화 할 필요가 없습니다 .utc().

함께 모아서:

var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").valueOf();
var m = moment(ts);
var s = m.format("M/D/YYYY H:mm");
alert("Values are: ts = " + ts + ", s = " + s);

내 컴퓨터에서 미국 태평양 시간대의 결과는 다음과 같습니다.

값은 다음과 같습니다. ts = 1413388800000, s = 2014 년 10 월 15 일 9:00

입력 값은 현지 시간으로 해석되므로 ts다른 시간대에있는 경우 다른 값을 얻게됩니다 .

또한 전체 초 단위로 작업하고 싶다면 (정확도를 잃을 수 있음) moment에는 이에 대한 방법도 있습니다. 당신이 사용하는 것이 .unix()전체 초에 타임 스탬프를 반환하고, moment.unix(ts)순간에 다시 구문 분석 할 수 있습니다.

var ts = moment("10/15/2014 9:00", "M/D/YYYY H:mm").unix();
var m = moment.unix(ts);

http://momentjs.com/docs/#/displaying/unix-timestamp/

밀리 초가 아닌 유닉스 초의 수를 얻습니다!

비 ISO 8601 형식을 사용하고 있기 때문에 1000 을 곱 하거나 사용 valueOf()하고 포맷터를 사용하는 것을 잊지 마십시오. 포맷터를 전달하는 것을 잊은 경우 날짜는 UTC 시간대 또는 잘못된 날짜로 구문 분석됩니다.

moment("10/15/2014 9:00", "MM/DD/YYYY HH:mm").valueOf()

참조 URL : https://stackoverflow.com/questions/26392280/using-momentjs-to-convert-date-to-epoch-then-back-to-date

반응형