Cara mengonversi cap waktu unix ke tanggal kalender moment.js

141

Saya memiliki cap waktu unix, dan saya mencoba mengubahnya menjadi tanggal kalender seperti MM/DD/YYYY. Sejauh ini, saya punya ini:

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

Ketika saya mencoba untuk mencetak tanggal kalender, jendela mengatakan "Tanggal tidak valid". Adakah yang bisa membantu saya?

Andrew
sumber

Jawaban:

364

Menggunakan moment.js saat Anda bertanya, ada unixmetode yang menerima cap waktu unix dalam hitungan detik:

var dateString = moment.unix(value).format("MM/DD/YYYY");
Matt Johnson-Pint
sumber
3
Itu bukan tanggal kalender.
Ian Warburton
1
@ IanWarburton - bukan ??
Matt Johnson-Pint
Saya kira itu sesuai dengan pertanyaan. Tapi saya pikir tanggal kalender di moment.js terlihat seperti ini .... moment (Tanggal baru (item.date)) calendar ()
Ian Warburton
5
@IWarburton - Anda tidak perlu objek tanggal baru di sana. The calendarFungsi bagus ( dokumentasi di sini ), tapi tidak dalam format yang OP minta.
Matt Johnson-Pint
1
Perlu dicatat mengapa pertanyaan itu gagal tetapi ini berhasil. Alasannya adalah karena monent(number) mengharapkan cap waktu unix dalam mili detik (yang konsisten dengan Dateobjek), sedangkan cap waktu unix dalam detik secara default. Sehingga Anda juga bisa melakukan moment(value*1000)alih-alih moment.unix(value), tetapi menggunakan unixlebih jelas.
icc97
39

Cap waktu UNIX hitungan detik dari tahun 1970, jadi Anda perlu mengubahnya menjadi objek Date JS:

var date = new Date(unixTimestamp*1000);
Cris
sumber
Ya, itu solusinya dengan versi terbaru saat ini, atau setidaknya yang saya dapatkan dari npm baru-baru ini. walaupun saya mendapat .unix () dari saat saya harus * 1000 ketika instantiating lagi. misalnya: moment (moment (). unix () * 1000)
kroe
Jawaban terbaik membandingkan dengan moment.js logic
Andris
19

Moment.js menyediakan format Lokal yang dapat digunakan.

Berikut ini sebuah contoh:

const moment = require('moment');

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

console.log(formatted); // "02/24/2018"
Benny Neugebauer
sumber
4
new moment(timeStamp,'yyyyMMddHHmmssfff').toDate()
Mohamed.Abdo
sumber
9
Meskipun kode ini dapat menjawab pertanyaan, akan lebih baik untuk memasukkan beberapa konteks, menjelaskan cara kerjanya, dan menjelaskan kapan menggunakannya. Jawaban kode saja tidak berguna dalam jangka panjang. Selain itu, kode Anda tidak diformat dengan benar.
ryanyuyu
4

Hanya itu,

moment.unix(date).toDate();
Danillo Leão Lopes
sumber
3

Mungkin sedikit terlambat tetapi untuk masalah baru seperti ini saya menggunakan kode ini:

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

Anda dapat mengubah format agar sesuai dengan kebutuhan Anda dan juga menambahkan zona waktu seperti ini:

moment(timestamp, 'X').tz(timezone).format('lll');
Eduardo Sanchez G
sumber
1
Ini adalah metode terbaik yang pernah saya lihat di sini.
LukeVenter
1
Hanya dengan menambahkan jawaban ini (yang merupakan jawaban paling benar di sini). Gunakan huruf kecil xuntuk cap waktu ms unix. Dokumentasi di sini
JonTroncoso
0

Saya memperbaikinya seperti contoh ini.

$scope.myCalendar = new Date(myUnixDate*1000);
<input date-time ng-model="myCalendar" format="DD/MM/YYYY" />
Khachornchit Songsaen
sumber
0
$(document).ready(function() {
    var value = $("#unixtime").val(); //this retrieves the unix timestamp
    var dateString = moment(value, 'MM/DD/YYYY', false).calendar(); 
    alert(dateString);
});

Ada mode ketat dan mode Forgiving .

Sementara mode ketat berfungsi lebih baik di sebagian besar situasi, mode memaafkan bisa sangat berguna ketika format string yang diteruskan ke momen dapat bervariasi.

Dalam rilis selanjutnya, parser akan menggunakan mode ketat secara default. Mode ketat memerlukan input ke momen untuk mencocokkan dengan format yang ditentukan, termasuk pemisah. Mode ketat diatur dengan melewatkan true sebagai parameter ketiga ke fungsi momen.

Skenario umum di mana mode memaafkan berguna adalah dalam situasi di mana API pihak ketiga memberikan tanggal, dan format tanggal untuk API itu bisa berubah. Misalkan API dimulai dengan mengirim tanggal dalam format 'YYYY-MM-DD', dan kemudian berubah menjadi format 'MM / DD / YYYY'.

Dalam mode ketat, kode berikut ini menghasilkan 'Tanggal Tidak Valas' ditampilkan:

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

Dalam mode pemaafan menggunakan string format, Anda mendapatkan tanggal yang salah:

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

cara lain adalah

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

Fungsi ini menciptakan tanggal dari cap waktu:

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

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

        return parsed.format('MMM D, YYYY, HH:mmA')
    }
Bill Zelenko
sumber
0
moment(1454521239279).toDate()
moment(1454521239279).format()
Vincent
sumber
0
moment(timestamp).format('''any format''')
Rishabh Mehrotra
sumber
3
Meskipun kode ini dapat menyelesaikan masalah OP, yang terbaik adalah menyertakan penjelasan tentang bagaimana kode Anda mengatasi masalah OP. Dengan cara ini, pengunjung masa depan dapat belajar dari pos Anda, dan menerapkannya pada kode mereka sendiri. SO bukan layanan pengkodean, tetapi sumber daya untuk pengetahuan. Juga, kualitas tinggi, jawaban lengkap lebih cenderung terunggulkan. Fitur-fitur ini, bersama dengan persyaratan bahwa semua posting mandiri, adalah beberapa kekuatan SO sebagai platform, yang membedakannya dari forum. Anda dapat mengedit untuk menambahkan info tambahan & / atau untuk melengkapi penjelasan Anda dengan dokumentasi sumber.
ysf