유닉스 타임 스탬프를 달력 날짜 moment.js로 변환하는 방법


141

유닉스 타임 스탬프가 있고와 같은 캘린더 날짜로 변환하려고합니다 MM/DD/YYYY. 지금까지 나는 이것을 가지고있다 :

$(document).ready(function() {
  var value = $("#unixtime").val(); //this retrieves the unix timestamp
  var dateString = moment(value).calendar(); 
  alert(dateString);
});

달력 날짜를 인쇄하려고하면 창에 "잘못된 날짜"가 표시됩니다. 누구든지 나를 도울 수 있습니까?

답변:


364

요청한 것처럼 moment.js를 사용하면 unix초 단위로 유닉스 타임 스탬프를 허용 하는 방법이 있습니다.

var dateString = moment.unix(value).format("MM/DD/YYYY");

3
달력 날짜가 아닙니다.
Ian Warburton

1
@IanWarburton-아니에요 ??
Matt Johnson-Pint

나는 그것이 질문에 따른 것이라고 생각합니다. 그러나 moment.js의 달력 날짜는 다음과 같습니다. moment (new Date (item.date)). calendar ()
Ian Warburton

5
@IanWarburton-거기에 새로운 날짜 객체가 필요하지 않습니다. 이 calendar기능은 훌륭 하지만 ( docs here ) OP가 요청한 형식이 아닙니다.
Matt Johnson-Pint

1
왜 질문이 실패했는지는 주목할 가치가 있지만 이것이 효과가 있습니다. 그 이유는 Unix 타임 스탬프가 기본적으로 초 단위 인 반면 밀리 ( UNIX 타임 스탬프는 개체 와 일치 함)를 monent(number) 예상 하기 때문 Date입니다. 따라서 moment(value*1000)대신 대신 할 수도 moment.unix(value)있지만 사용하는 unix것이 더 명확합니다.
icc97

39

UNIX 타임 스탬프는 1970 년 이후의 초 수이므로 JS Date 객체로 변환해야합니다.

var date = new Date(unixTimestamp*1000);

그렇습니다. 최신 버전의 순간이나 적어도 npm에서 얻은 것입니다. 비록 순간부터 .unix ()를 얻었지만 다시 인스턴스화 할 때 * 1000이어야했습니다. 예를 들면 : 순간 (순간 () 유닉스 () * 1000.)
kroe

moment.js 논리와 비교 한 최고의 답변
Andris

19

Moment.js 는 사용할 수있는 현지화 된 형식 을 제공합니다 .

예를 들면 다음과 같습니다.

const moment = require('moment');

const timestamp = 1519482900000;
const formatted = moment(timestamp).format('L');

console.log(formatted); // "02/24/2018"

4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()

9
이 코드는 질문에 대답 할 수 있지만 일부 컨텍스트를 포함하고 작동 방식을 설명하고 사용시기를 설명하는 것이 좋습니다. 코드 전용 답변은 장기적으로 유용하지 않습니다. 또한 코드 형식이 잘못되었습니다.
ryanyuyu


3

조금 늦을 수도 있지만 이와 같은 새로운 문제에 대해서는이 코드를 사용합니다.

moment(timestamp, 'X').format('lll');

필요에 맞게 형식을 변경하고 다음과 같이 시간대를 추가 할 수 있습니다.

moment(timestamp, 'X').tz(timezone).format('lll');

1
이것이 내가 본 최고의 방법입니다.
LukeVenter

1
이 답변에 추가하기 만하면됩니다 (여기에서 가장 정확한 답변입니다). xms 유닉스 타임 스탬프 에는 소문자 를 사용하십시오 . 여기에 설명서
JonTroncoso

0

이 예제와 같이 수정했습니다.

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />

0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

엄격 모드용서 모드 .

엄격 모드는 대부분의 상황에서 더 잘 작동하지만 용서 모드는 순간에 전달되는 문자열의 형식이 다를 때 매우 유용 할 수 있습니다.

이후 릴리스에서 파서는 기본적으로 엄격 모드를 사용합니다. 엄격 모드에서는 구분 기호를 포함하여 지정된 형식과 정확히 일치하도록 순간 입력이 필요합니다. 엄격 모드는 모멘트 기능에 세 번째 매개 변수로 true를 전달하여 설정됩니다.

용서 모드가 유용한 일반적인 시나리오는 타사 API가 날짜를 제공하고 해당 API의 날짜 형식이 변경 될 수있는 상황입니다. API가 'YYYY-MM-DD'형식으로 날짜를 전송 한 다음 나중에 'MM / DD / YYYY'형식으로 변경한다고 가정합니다.

엄격 모드에서 다음 코드는 '잘못된 날짜'를 표시합니다.

moment('01/12/2016', 'YYYY-MM-DD', true).format()
"Invalid date"

형식 문자열을 사용하는 용서 모드에서 잘못된 날짜가 표시됩니다.

moment('01/12/2016', 'YYYY-MM-DD').format()
"2001-12-20T00:00:00-06:00"

다른 방법은

$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment.unix(value).calendar(); 
    alert(dateString);
});

0

이 함수는 타임 스탬프에서 날짜를 만듭니다.

    function formatDateTime(dateString) {
        const parsed = moment(new Date(dateString))

        if (!parsed.isValid()) {
            return dateString
        }

        return parsed.format('MMM D, YYYY, HH:mmA')
    }

0
moment(1454521239279).toDate()
moment(1454521239279).format()

0
moment(timestamp).format('''any format''')

3
이 코드는 OP 문제를 해결할 수 있지만 코드가 OP 문제를 해결하는 방법에 대한 설명을 포함하는 것이 가장 좋습니다. 이런 식으로, 미래 방문자는 귀하의 게시물에서 배우고 자신의 코드에 적용 할 수 있습니다. SO는 코딩 서비스가 아니라 지식을위한 리소스입니다. 또한 고품질의 완전한 답변이 상향 조정될 가능성이 높습니다. 이러한 기능은 모든 게시물이 자체적으로 포함되어야한다는 요구 사항과 함께 플랫폼으로서 SO의 강점 중 일부이며 포럼과 차별화됩니다. 추가 정보를 추가하거나 소스 문서로 설명을 보충하도록 편집 할 수 있습니다.
ysf
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.