JavaScript에서 Unix 타임 스탬프를 시간으로 변환


1157

MySQL 데이터베이스에 유닉스 타임 스탬프로 시간을 저장하고 있으며 JavaScript 코드로 전송됩니다. 시간을 어떻게 빼낼 수 있을까요?

예를 들어, HH / MM / SS 형식입니다.


5
JS 타임 스탬프는 밀리 초 단위이고 PHP는 초 단위로 제공하기 때문에 1000을 곱하면됩니다.
ankr

다른 날짜 형식의 매우 유용한 링크는 다음과 같습니다. timestamp.online/article/… 곱셈을 1000으로 결합하면 작업이 완료됩니다!
케빈 르마 이어

답변:


1731

let unix_timestamp = 1549312452
// Create a new JavaScript Date object based on the timestamp
// multiplied by 1000 so that the argument is in milliseconds, not seconds.
var date = new Date(unix_timestamp * 1000);
// Hours part from the timestamp
var hours = date.getHours();
// Minutes part from the timestamp
var minutes = "0" + date.getMinutes();
// Seconds part from the timestamp
var seconds = "0" + date.getSeconds();

// Will display time in 10:30:23 format
var formattedTime = hours + ':' + minutes.substr(-2) + ':' + seconds.substr(-2);

console.log(formattedTime);

Date 객체에 대한 자세한 내용은 MDN 또는 ECMAScript 5 사양을 참조하십시오 .


114
@nickf 곱셈 현대 CPU에서 사소한 - 문자열 연결이 필요합니다 훨씬 더 많은 일을!
Alnitak

4
연결은 메모리 읽기와 메모리 쓰기로 구성되어야합니다. 어떻게 누군가가 곱하기보다 더하기를 추가하고 더 복잡하게 만드는 무언가를 디자인 할 수있는 방법 ... 어떻게 아이를 연결시켜 줄 수 있는지 물어보십시오. 플러스 메모리는 선형 적으로 작동하도록 배치되었습니다 ... 누군가가 @ nickf 주석에 대한 참조를 제공 할 수 있습니까?

29
실제로는 10보다 작은 값 앞에 0을 더 추가하지 않기 때문에 '10 : 2 : 2 '형식으로 시간을 표시합니다.
Fireblaze

16
@ user656925-곱셈에는 숫자가 포함되고 연결에는 문자열이 포함됩니다. 컴퓨터는 문자열보다 숫자를 훨씬 효율적으로 처리합니다. 문자열 연결이 완료되면 백그라운드에서 많은 메모리 관리가 진행됩니다. 그러나 어쨌든 이미 문자열 연결을 수행하는 경우 문자열 중 하나에 몇 개의 추가 문자를 포함하면 실제로 두 개의 숫자를 곱하는 데 필요한 하나의 프로세서보다 평균 비용이 저렴할 수 있습니다.
Brilliand

6
@Stallman 숫자 계산은 컴퓨터가 수행하는 가장 기본적인 작업이며 메모리와 런타임 모두에서 매우 효율적입니다. 비록 그의 의견의 마지막 부분 인 IMHO가 완전히 허위이지만, Brilliand의 의견은 위와 관련이 있습니다.
Alnitak

297

function timeConverter(UNIX_timestamp){
  var a = new Date(UNIX_timestamp * 1000);
  var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
  var year = a.getFullYear();
  var month = months[a.getMonth()];
  var date = a.getDate();
  var hour = a.getHours();
  var min = a.getMinutes();
  var sec = a.getSeconds();
  var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ;
  return time;
}
console.log(timeConverter(0));


HH / MM / SS의 경우 마지막 세 변수 만 사용하면 시간이 현지 시간으로 표시되지만 UTC 시간을 얻으려면 getUTC 메소드를 사용하십시오. 코드는 다음과 같습니다.
shomrat

36
이 솔루션을 사용했지만 다음과 같이 : 3 또는 : 9 대신 분과 초가 : 03 또는 : 09로 표시되도록 조정했습니다.var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds();
user1985189

3
버그 : getMonth()0에서 11 사이의 월 숫자를 반환하므로 a.getMonth() - 1잘못되었습니다.
jcampbell1

195

JavaScript는 밀리 초 단위로 작동하므로 먼저 UNIX 타임 스탬프를 초에서 밀리 초로 변환해야합니다.

var date = new Date(UNIX_Timestamp * 1000);
// Manipulate JavaScript Date object here...

80

Date.format()PHP date()기능 스타일로 JavaScript 날짜 형식을 구현 하는 Jacob Wright 라이브러리 의 일부 입니다.

new Date(unix_timestamp * 1000).format('h:i:s')

12
나는 그것이 며칠 만에 좋은 대답 이었다는 것을 알고 있지만, 요즘 네이티브 js 객체를 확장하는 것은 안티 패턴입니다.
피터

3
노드 js에서 (더 이상?) 작동하지 않습니다 format is not a function. 그러나 이것은 분명히 작동합니다 : stackoverflow.com/a/34015511/7550772
ibodi

71

사용하다:

var s = new Date(1504095567183).toLocaleDateString("en-US")
console.log(s)
// expected output "8/30/2017"  

그리고 시간 :

var s = new Date(1504095567183).toLocaleTimeString("en-US")
console.log(s)
// expected output "3:19:27 PM"

Date.prototype.toLocaleDateString () 참조


요청한 시간 (HH / MM / SS)이 아닌 날짜 (M / D / YYYY)를 가져 오는 명령입니다.
볼프강

2
참고로 숫자 "1504095567183"은 unix_timestamp * 1000
camillo777

1
또한 toLocaleString날짜와 시간을 모두 포함합니다.
Sean

56

다음은 초를 형식화하는 가장 짧은 단일 라이너 솔루션입니다 hh:mm:ss.

/**
 * Convert seconds to time string (hh:mm:ss).
 *
 * @param Number s
 *
 * @return String
 */
function time(s) {
    return new Date(s * 1e3).toISOString().slice(-13, -5);
}

console.log( time(12345) );  // "03:25:45"

메소드 Date.prototype.toISOString()는 단순화 된 확장 ISO 8601 형식으로 시간을 반환하며 , 항상 24 자 또는 27 자 (즉 YYYY-MM-DDTHH:mm:ss.sssZ, ±YYYYYY-MM-DDTHH:mm:ss.sssZ각각)입니다. 시간대는 항상 0 UTC 오프셋입니다.

NB :이 솔루션에는 타사 라이브러리가 필요하지 않으며 모든 최신 브라우저 및 JavaScript 엔진에서 지원됩니다.


Chrome 콘솔에 기능을 붙여 넣습니다 .// 바이올린에도 01:02:00이 표시됩니다! Firefox에서도 동일한 결과를 얻었습니다. 매우 이상합니다 ... GMT + 1이기 때문에 확실합니다!
Steve Chamaillard

시간대를 무시하는 답변에 대한 수정 사항을 제공 했으므로 항상 올바른 형식의 값을 표시합니다!
Steve Chamaillard

1
@SteveChamaillard 감사합니다. Steve. 당신이 옳았 고 toTimeString시간대와 잘 작동하지 않았습니다. 불행히도 편집하기 전에 거부되었습니다. 그러나 더 이상 사용되지 않으며 다른 플랫폼에서 다른 결과를 반환 할 수 toISOString있으므로 대신 사용 하는 것이 좋습니다 toGMTString.
VisioN

ES6으로 더 짧아짐 : let time = s => new Date (s * 1e3) .toISOString (). slice (-13, -5)
SamGoody

28

momentjs.com 과 같은 라이브러리를 사용하여 이것을 간단하게 만들 수 있습니다.

유닉스 타임 스탬프를 기반으로 :

var timestamp = moment.unix(1293683278);
console.log( timestamp.format("HH/mm/ss") );

MySQL 날짜 문자열을 기반으로 :

var now = moment("2010-10-10 12:03:15");
console.log( now.format("HH/mm/ss") );

3
moment.js (또는 유사한 라이브러리)의 또 다른 장점은 "6 시간 전"과 같은 메시지 에 대해 상대 시간을 지원한다는 것입니다 .
martin

귀하의 console.log예에서로 인해 형식에 대해 혼란 스러웠지만 /많은 도움이되었습니다.
NetOperator Wibby

내 타임 스탬프는 UTC 형식입니다. 여기에 변경해야 할 사항이 있습니까? 오전 / 오후에 어떻게해야합니까?
코덱

moment.js는 그런 작은 일을하기 위해 과잉이며 성능에 영향을 미칩니다. 대신 기본 방법을 사용하십시오. cf. 댄 Alboteanu의 대답
로빈 METRAL

22

UNIX 타임 스탬프는 1970 년 1 월 1 일 00:00:00 UTC 이후 의 수입니다 ( Wikipedia 에 따름) ).

Javascript에서 Date 객체의 인수는 1970 년 1 월 1 일 UTC 00:00:00 이후 ( 밀리 초)입니다 ( W3Schools Javascript 설명서 에 따름). .

예를 들어 아래 코드를 참조하십시오.

    function tm(unix_tm) {
        var dt = new Date(unix_tm*1000);
        document.writeln(dt.getHours() + '/' + dt.getMinutes() + '/' + dt.getSeconds() + ' -- ' + dt + '<br>');

    }

tm(60);
tm(86400);

제공합니다 :

1/1/0 -- Thu Jan 01 1970 01:01:00 GMT+0100 (Central European Standard Time)
1/0/0 -- Fri Jan 02 1970 01:00:00 GMT+0100 (Central European Standard Time)

19

초를 hh : mm : ss : 형식으로 지정하는 가장 짧은 단일 라이너 솔루션 :

console.log(new Date(1549312452 * 1000).toISOString().slice(0, 19).replace('T', ' '));
// "2019-02-04 20:34:12"


1
PHP 유닉스와이를 사용할 때 몇 가지 이유로 실제 시간보다 내가 GET + 5 시간 타임 스탬프 : /
keanu_reeves

2
@keanu_reeves-미국 동부 표준시로 타임 스탬프가 UTC 인 것처럼 들립니다. .slice (0,19)를 제거하면 결과의 시간대가 Z (Zulu)임을 알 수 있습니다.
bitfiddler

17

Moment.js를 사용하면 다음 과 같은 시간과 날짜를 얻을 수 있습니다.

var dateTimeString = moment(1439198499).format("DD-MM-YYYY HH:mm:ss");

그리고 당신은 이것을 사용하여 시간 만 얻을 수 있습니다 :

var timeString = moment(1439198499).format("HH:mm:ss");

이 형식 DD-MM-YYYY HH : mm : ss를 다음과 같은 형식으로 변환하는 것과 같이 거꾸로 수행하는 방법을 알고 있습니까?
Kemat Rochi

안녕하세요 Kemat, 당신은이 진술 순간을 통해 그것을 할 수 있습니다 ( '2009-07-15 00:00:00'). unix ()
Peter T.

내 타임 스탬프는 UTC 형식입니다. 내가 여기에 만들어야 할 차이점이 있습니까? 오전 / 오후에 어떻게해야합니까?
코덱

타임 스탬프를 날짜 usign momentJS로 쉽게 변환 할 수 있습니다.이 coderszine.com/convert-timestamp-to-date-using-javascript
Laeeq

15

위에서 언급 한 솔루션의 문제점은 시간, 분 또는 초에 한 자리 (예 : 0-9) 만있는 경우 시간이 잘못 될 수 있습니다 (예 : 2 : 3 : 9 일 수 있지만 오히려 02이어야 함). 03:09.

이 페이지 에 따르면 Date의 "toLocaleTimeString"메소드를 사용하는 것이 더 나은 솔루션 인 것 같습니다.


5
대부분의 웹 솔루션의 경우 24 시간 대 오전 12시 / 오후 형식과 같이 클라이언트의 로캘을 사용하기 때문에 가장 정답입니다. 시간 문자열의 경우 다음을 사용합니다.date.toLocaleTimeString()
Bachi

1
toTimeString방법으로 는 발생하지 않습니다 . 여기를 확인하십시오 : stackoverflow.com/a/35890537/1249581 .
VisioN

14

다른 방법은 ISO 8601 날짜입니다.

var timestamp = 1293683278;
var date = new Date(timestamp * 1000);
var iso = date.toISOString().match(/(\d{2}:\d{2}:\d{2})/)
alert(iso[1]);


내가 얻을 "개체가 ...있는 방법 'toISOString'이 없습니다"
Aviram Netanel

내 타임 스탬프는 UTC 형식입니다. 내가 여기에 만들어야 할 차이점이 있습니까? 오전 / 오후에 어떻게해야합니까?
코덱

13

현재 유닉스 타임 스탬프를 사용해야합니다 :

var dateTimeString = moment.unix(1466760005).format("DD-MM-YYYY HH:mm:ss");

10

@ shomrat의 답변을 바탕으로 다음과 같이 날짜 시간을 자동으로 쓰는 스 니펫이 있습니다 (스택에 대한 StackOverflow의 날짜와 약간 비슷합니다 :) answered Nov 6 '16 at 11:51.

today, 11:23

또는

yersterday, 11:23

또는 (오늘과 다르지만 같은 해)

6 Nov, 11:23

또는 (오늘날과 다른 연도 인 경우)

6 Nov 2016, 11:23

function timeConverter(t) {     
    var a = new Date(t * 1000);
    var today = new Date();
    var yesterday = new Date(Date.now() - 86400000);
    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var year = a.getFullYear();
    var month = months[a.getMonth()];
    var date = a.getDate();
    var hour = a.getHours();
    var min = a.getMinutes();
    if (a.setHours(0,0,0,0) == today.setHours(0,0,0,0))
        return 'today, ' + hour + ':' + min;
    else if (a.setHours(0,0,0,0) == yesterday.setHours(0,0,0,0))
        return 'yesterday, ' + hour + ':' + min;
    else if (year == today.getFullYear())
        return date + ' ' + month + ', ' + hour + ':' + min;
    else
        return date + ' ' + month + ' ' + year + ', ' + hour + ':' + min;
}

9

40KB 라이브러리가 필요없는 최신 솔루션 :

Intl.DateTimeFormat 은 문화적으로 제국 주의적으로 날짜 / 시간을 형식화하는 방법입니다.

// Setup once
var options = {
    //weekday: 'long',
    //month: 'short',
    //year: 'numeric',
    //day: 'numeric',
    hour: 'numeric',
    minute: 'numeric',
    second: 'numeric'
},
intlDate = new Intl.DateTimeFormat( undefined, options );

// Reusable formatter
var timeStamp = 1412743273;
console.log( intlDate.format( new Date( 1000 * timeStamp ) ) );

"비문화적으로 제국주의적인 방법" 에 관하여 : "비문화적으로 그리고 비 제국주의적인 방법" 을 의미하지 않습니까?
Peter Mortensen

불행히도이 방법은 Safari와 호환되지 않습니다.
Stephen S.

9

내 타임 스탬프가 PHP 백엔드에서 가져오고 있습니다. 위의 모든 방법을 시도했지만 작동하지 않았습니다. 그런 다음 작동하는 자습서를 보았습니다.

var d =val.timestamp;
var date=new Date(+d); //NB: use + before variable name

console.log(d);
console.log(date.toDateString());
console.log(date.getFullYear());
console.log(date.getMinutes());
console.log(date.getSeconds());
console.log(date.getHours());
console.log(date.toLocaleTimeString());

위의 방법은이 결과를 생성합니다

1541415288860
Mon Nov 05 2018 
2018 
54 
48 
13
1:54:48 PM

타임 스탬프와 완벽하게 작동하는 여러 가지 방법이 있습니다. 캔트 그들 모두를 나열


8
function getTIMESTAMP() {
  var date = new Date();
  var year = date.getFullYear();
  var month = ("0" + (date.getMonth() + 1)).substr(-2);
  var day = ("0" + date.getDate()).substr(-2);
  var hour = ("0" + date.getHours()).substr(-2);
  var minutes = ("0" + date.getMinutes()).substr(-2);
  var seconds = ("0" + date.getSeconds()).substr(-2);

  return year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;
}

//2016-01-14 02:40:01

잘 작동합니다. 감사합니다
Vlad

6

일부 답변에서 제로 문제에주의하십시오. 예를 들어 타임 스탬프 1439329773는 실수로12/08/2015 0:49 .

이 문제를 극복하기 위해 다음을 사용하는 것이 좋습니다.

var timestamp = 1439329773; // replace your timestamp
var date = new Date(timestamp * 1000);
var formattedDate = ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
console.log(formattedDate);

이제 결과는 다음과 같습니다.

12/08/2015 00:49

5
// Format value as two digits 0 => 00, 1 => 01
function twoDigits(value) {
   if(value < 10) {
    return '0' + value;
   }
   return value;
}

var date = new Date(unix_timestamp*1000);
// display in format HH:MM:SS
var formattedTime = twoDigits(date.getHours()) 
      + ':' + twoDigits(date.getMinutes()) 
      + ':' + twoDigits(date.getSeconds());

필요할 때마다 후행 0으로 숫자를 얻으려면 별도의 별도 함수가 필요하다고 생각하지 않습니다. 아래에서 내 대답을 참조하십시오.
trejder

2
@trejder, 예를 들어, 논리를 복제하는 동안 추가 기능을 사용하면 한 곳에서 논리를 사용할 수 있습니다. 또한 날짜 함수 (예 : getHours ())를 항상 두 번 트리거합니다. 한 번만 호출됩니다. 다시 실행할 일부 라이브러리 함수가 얼마나 무거운 지 알 수 없습니다 (그러나 날짜가 가볍다 고 생각합니다).
walv

4
function timeConverter(UNIX_timestamp){
 var a = new Date(UNIX_timestamp*1000);
     var hour = a.getUTCHours();
     var min = a.getUTCMinutes();
     var sec = a.getUTCSeconds();
     var time = hour+':'+min+':'+sec ;
     return time;
 }

4

날짜 / 시간 변환기를 참조하십시오 .

당신은 필요 ParseInt그렇지 않으면 작동하지 않을 것입니다 :


if (!window.a)
    window.a = new Date();

var mEpoch = parseInt(UNIX_timestamp);

if (mEpoch < 10000000000)
    mEpoch *= 1000;

------
a.setTime(mEpoch);
var year = a.getFullYear();
...
return time;

4

다음 함수를 사용하여 타임 스탬프를 HH:MM:SS형식으로 변환 할 수 있습니다 .

var convertTime = function(timestamp, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    var date = timestamp ? new Date(timestamp * 1000) : new Date();
    return [
        pad(date.getHours()),
        pad(date.getMinutes()),
        pad(date.getSeconds())
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

구분 기호를 전달하지 않고 :(기본) 구분 기호로 사용합니다.

time = convertTime(1061351153); // --> OUTPUT = 05:45:53

/구분자 로 사용 하려면 두 번째 매개 변수로 전달하십시오.

time = convertTime(920535115, '/'); // --> OUTPUT = 09/11/55

데모

var convertTime = function(timestamp, separator) {
    var pad = function(input) {return input < 10 ? "0" + input : input;};
    var date = timestamp ? new Date(timestamp * 1000) : new Date();
    return [
        pad(date.getHours()),
        pad(date.getMinutes()),
        pad(date.getSeconds())
    ].join(typeof separator !== 'undefined' ?  separator : ':' );
}

document.body.innerHTML = '<pre>' + JSON.stringify({
    920535115 : convertTime(920535115, '/'),
    1061351153 : convertTime(1061351153, ':'),
    1435651350 : convertTime(1435651350, '-'),
    1487938926 : convertTime(1487938926),
    1555135551 : convertTime(1555135551, '.')
}, null, '\t') +  '</pre>';

이 바이올린을 참조하십시오 .


3

 function getDateTimeFromTimestamp(unixTimeStamp) {
        var date = new Date(unixTimeStamp);
        return ('0' + date.getDate()).slice(-2) + '/' + ('0' + (date.getMonth() + 1)).slice(-2) + '/' + date.getFullYear() + ' ' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2);
      }

    var myTime = getDateTimeFromTimestamp(1435986900000);
    console.log(myTime); // output 01/05/2000 11:00


이것은 유닉스 타임 스탬프가 아닙니다 : 1435986900000 / 이것은 유닉스 타임 스탬프입니다 : 1435986900
Orici

이 솔루션은 저에게 효과적이지만 숫자 대신 Feb Mar Apr와 같은 달을 어떻게 취할 수 있습니까?
abidinberkay

2

Unix 시간을 실제 시간, 분 및 초로 변환하려면 다음 코드를 사용할 수 있습니다.

var hours = Math.floor(timestamp / 60 / 60);
var minutes = Math.floor((timestamp - hours * 60 * 60) / 60);
var seconds = Math.floor(timestamp - hours * 60 * 60 - minutes * 60 );
var duration = hours + ':' + minutes + ':' + seconds;

1
function getDateTime(unixTimeStamp) {

    var d = new Date(unixTimeStamp);
    var h = (d.getHours().toString().length == 1) ? ('0' + d.getHours()) : d.getHours();
    var m = (d.getMinutes().toString().length == 1) ? ('0' + d.getMinutes()) : d.getMinutes();
    var s = (d.getSeconds().toString().length == 1) ? ('0' + d.getSeconds()) : d.getSeconds();

    var time = h + '/' + m + '/' + s;

    return time;
}

var myTime = getDateTime(1435986900000);
console.log(myTime); // output 01/15/00

1

아래 코드는 콘솔 로그 접두사에 이상적인 3 자리 밀리 시크도 제공합니다.

const timeStrGet = date => {
    const milliSecsStr = date.getMilliseconds().toString().padStart(3, '0') ;
    return `${date.toLocaleTimeString('it-US')}.${milliSecsStr}`;
};

setInterval(() => console.log(timeStrGet(new Date())), 299);



1

@ Aron의 대답은 효과가 있지만 1980 년부터 타임 스탬프를 변환하려고 시도했을 때 효과가 없었습니다. 따라서 다음과 같이 약간 변경했습니다.

function ConvertUnixTimeToDateForLeap(UNIX_Timestamp) {
    var dateObj = new Date(1980, 0, 1, 0, 0, 0, 0);
    dateObj.setSeconds(dateObj.getSeconds() + UNIX_Timestamp);
    return dateObj;  
}

document.body.innerHTML = 'TimeStamp : ' + ConvertUnixTimeToDateForLeap(1269700200);

다른 10 년 정도의 타임 스탬프가 있다면 이것을 사용하십시오. 그것은 나를 위해 많은 두통을 구했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.