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?

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");

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);

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"

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

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


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');

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" />

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);
});

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')
    }

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

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.