[javascript] UTC Epoch를 현지 날짜로 변환

나는 지금 이것과 조금 싸워왔다. 에포크를 날짜 객체로 변환하려고합니다. 신기원은 UTC로 나에게 보내진다. new Date()에포크 를 통과 할 때마다 로컬 에포크라고 가정합니다. UTC 객체를 만든 다음 setTime()적절한 시대로 조정하는 데 사용 했지만 유용한 유일한 방법은 toUTCString()문자열이며 도움이되지 않습니다. 해당 문자열을 새로운 날짜로 전달하면 UTC라는 것을 알 수 있지만 그렇지 않습니다.

new Date( new Date().toUTCString() ).toLocaleString()

다음 시도는 로컬 현재 시대와 UTC 현재 시대 사이의 차이를 얻으려고 시도했지만 그중 하나도 얻을 수 없었습니다.

new Date( new Date().toUTCString() ).getTime() - new Date().getTime()

1000 미만의 작은 차이 만 밀리 초 단위입니다.

어떤 제안?



답변

더 간단한 해결책이 있다고 생각합니다. 초기 날짜를 시대로 설정하고 UTC 단위를 추가하십시오. UTC 에포크 var가 초 단위로 저장되어 있다고 가정 해보십시오. 어때요 1234567890? 현지 시간대로 적절한 날짜로 변환하려면 다음을 수행하십시오.

var utcSeconds = 1234567890;
var d = new Date(0); // The 0 there is the key, which sets the date to the epoch
d.setUTCSeconds(utcSeconds);

d 이제는 내 시간대의 날짜로 설정되었습니다. Fri Feb 13 2009 18:31:30 GMT-0500 (EST)


답변

간단합니다 new Date(). 예를 들어 밀리 초가 걸립니다.

new Date(1394104654000)
> Thu Mar 06 2014 06:17:34 GMT-0500 (EST)


답변

그리고 로그의 경우 포맷을 위해 사용했던 Moment.js 라이브러리를 사용 하여이 작업을 수행 했습니다.

moment.utc(1234567890000).local()
>Fri Feb 13 2009 19:01:30 GMT-0430 (VET)


답변

에포크 시간에 1970 년 1 월 1 일에서 date.getTime()반환 밀리 초 당신은 시대의 타임 스탬프가있는 경우, 1000 곱하여 자바 스크립트 타임 스탬프로 변환 … 그래서, 1 월 1 일 1970.

   function epochToJsDate(ts){
        // ts = epoch timestamp
        // returns date obj
        return new Date(ts*1000);
   }

   function jsDateToEpoch(d){
        // d = javascript date obj
        // returns epoch timestamp
        return (d.getTime()-d.getMilliseconds())/1000;
   }


답변

 function ToLocalDate (inDate) {
    var date = new Date();
    date.setTime(inDate.valueOf() - 60000 * inDate.getTimezoneOffset());
    return date;
}


답변

[ms]의 현재 에포크 시간을 24 시간으로 변환합니다. 12 시간 형식 을 비활성화 하려면 옵션을 지정해야 할 수도 있습니다 .

$ node.exe -e "var date = new Date(Date.now()); console.log(date.toLocaleString('en-GB', { hour12:false } ));"

2/7/2018, 19:35:24

또는 JS로 :

var date = new Date(Date.now()); 
console.log(date.toLocaleString('en-GB', { hour12:false } ));
// 2/7/2018, 19:35:24

console.log(date.toLocaleString('en-GB', { hour:'numeric', minute:'numeric', second:'numeric', hour12:false } ));
// 19:35:24

참고 : 사용 en-GB여기가, 24 시간 형식을 사용하여 장소의 단지 (랜덤) 선택, 그것은 시간대 아니다!


답변

에포크 시간 (즉, 유닉스 에포크 시간) 거의 항상의 수 1970년 1월 1일 0시 0분 0초 (UTC 시간)부터 만료,하지의 수 밀리 초 여기에 몇 가지 답변을 암시했다.

https://ko.wikipedia.org/wiki/Unix_time

따라서 Unix Epoch 시간 값이 주어지면 아마도 초 단위가 될 것이며, 다음과 같이 보일 것 1547035195입니다. 이 사람을 JavaScript로 읽을 수있게하려면 값을 밀리 초로 변환하고 해당 값을 Date(value)생성자에 전달해야합니다 . 예 :

const unixEpochTimeMS = 1547035195 * 1000;
const d = new Date(unixEpochTimeMS);
// Careful, the string output here can vary by implementation...
const strDate = d.toLocaleString();

d.setUTCMilliseconds(0)JavaScript Date(value)생성자는 현지 시간이 아닌 밀리 초 단위 로 UTC 값을 사용 하므로 허용 된 답변 의 단계 를 수행 할 필요가 없습니다 .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Syntax

또한 Date(...)문자열 날짜 시간 표현을 사용하는 생성자를 사용 하지 않아야합니다 (권장되지 않음).