UNIXタイムスタンプをカレンダーの日付moment.jsに変換する方法


141

UNIXタイムスタンプがあり、それをなどのカレンダー日付に変換しようとしてい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、秒単位のUNIXタイムスタンプを受け入れるメソッドがあります:

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

3
それは暦日ではありません。
Ian Warburton

1
@IanWarburton-違いますか?
Matt Johnson-Pint 2015年

質問通りだと思います。しかし、私はこのようなmoment.jsのルックスにカレンダーの日付を考える....瞬間(新日(item.date))のカレンダーを()。
イアン・ウォーバートン

5
@IanWarburton-そこに新しい日付オブジェクトは必要ありません。calendar機能は素晴らしいです(ドキュメントここではなく、OPはを求めていること形式で、)。
Matt Johnson-Pint 2015年

1
質問が失敗する理由は注目に値しますが、これは機能します。その理由はmonent(number) ミリ秒単位のUNIXタイムスタンプを期待するためです(これはDateオブジェクトと一致しています)、UNIXタイムスタンプはデフォルトで秒単位です。したがって、のmoment(value*1000)代わりに行うこともできますがmoment.unix(value)、使用する方unixが明確です。
icc97

39

UNIXタイムスタンプは1970年からの秒数なので、JS Dateオブジェクトに変換する必要があります。

var date = new Date(unixTimestamp*1000);

はい、それはモーメントの最新バージョン、または少なくとも最近私がnpmから取得したもののソリューションでした。.unix()を取得した瞬間から、再度インスタンス化するときに* 1000にする必要がありました。例:moment(moment()。unix()* 1000)
kroe 2015年

moment.jsロジックと比較したベストアンサー
Andris


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

9
このコードは質問に答えることがありますが、いくつかのコンテキストを含め、それがどのように機能するかを説明し、それをいつ使用するかを説明する方が良いでしょう。コードのみの回答は、長期的には役に立ちません。さらに、コードが適切にフォーマットされていません。
ryanyuyu 2015


3

少し遅れるかもしれませんが、このような新しい問題の場合は、次のコードを使用します。

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

必要に応じて形式を変更し、次のようにタイムゾーンを追加することもできます。

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

1
これは私がここで見た中で最良の方法です。
LukeVenter

1
この答えに追加するだけです(これがここで最も正しい答えです)。xms unixタイムスタンプには小文字を使用します。ドキュメントはこちら
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);
});

ありstrictモード寛容モード

ストリクトモードはほとんどの状況でうまく機能しますが、許容モードは、瞬間的に渡される文字列の形式が異なる場合に非常に役立ちます。

今後のリリースでは、パーサーはデフォルトでストリクトモードを使用します。厳格モードでは、区切り記号を含め、指定された形式と完全に一致する瞬間までの入力が必要です。Strictモードは、3番目のパラメーターとして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(timestamp).format('''any format''')

3
このコードはOPの問題を解決する可能性がありますが、コードがOPの問題にどのように対処するかについての説明を含めるのが最善です。このようにして、将来の訪問者はあなたの投稿から学び、それを自分のコードに適用することができます。SOはコーディングサービスではなく、知識のリソースです。また、高品質で完全な回答が支持される可能性が高くなります。これらの機能は、すべての投稿が自己完結型であるという要件とともに、フォーラムとは異なるプラットフォームとしてのSOの強みの一部です。編集して情報を追加したり、ソースドキュメントで説明を補足したりできます。
ysf
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.