Unix zaman damgasını moment.js takvim tarihine dönüştürme


141

Unix zaman damgası var ve bunu gibi bir takvim tarihine dönüştürmeye çalışıyorum MM/DD/YYYY. Şimdiye kadar, bu var:

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

Takvim tarihini yazdırmaya çalıştığımda, pencerede "Geçersiz tarih" yazıyor. Biri bana yardım edebilir mi?

Yanıtlar:


364

İstediğiniz gibi moment.js'yi kullanarak unix, saniye cinsinden unix zaman damgalarını kabul eden bir yöntem vardır:

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

3
Bu bir takvim tarihi değil.
Ian Warburton

1
@IanWarburton - değil mi ??
Matt Johnson-Pint

Sanırım soruya göre. Ama moment.js'deki bir takvim tarihi böyle görünüyor .... anı (yeni Tarih (item.date)). Takvim ()
Ian Warburton

5
@IanWarburton - Orada yeni tarih nesnesine ihtiyacınız olmaz. calendarFonksiyon güzel (olan dokümanlar burada değil OP istedi bu biçimde).
Matt Johnson-Pint

1
Sorunun neden başarısız olduğunu belirtmek gerekir, ancak bu işe yarar. Bunun nedeni, mili saniye cinsinden ( nesneyle tutarlı ) monent(number) bir unix zaman damgası beklerken, unix zamanDate damgasının varsayılan olarak saniye cinsinden olmasıdır. Böylece moment(value*1000)bunun yerine de yapabilirsiniz moment.unix(value), ancak unixkullanımı daha nettir.
icc97

39

UNIX zaman damgası 1970'den saniye cinsinden sayılır, bu yüzden onu JS Date nesnesine dönüştürmeniz gerekir:

var date = new Date(unixTimestamp*1000);

Evet, bu anın en son sürümüyle ya da en azından son zamanlarda npm'den aldığım çözümdü. i .unix () 'i anladığım halde tekrar başlatırken aniden * 1000 almak zorunda kaldım. örneğin: moment (moment (). unix () * 1000)
kroe

Moment.js mantığı ile karşılaştırıldığında en iyi cevap
Andris


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

9
Bu kod soruyu cevaplayabilse de, bir bağlam eklemek, nasıl çalıştığını açıklamak ve ne zaman kullanılacağını açıklamak daha iyi olur. Yalnızca kod yanıtları uzun vadede yararlı değildir. Ayrıca, kodunuz düzgün biçimlendirilmemiş.
ryanyuyu


3

Biraz geç olabilir ama bu gibi yeni sorunlar için ben bu kodu kullanın:

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

Biçimi ihtiyaçlarınıza uyacak şekilde değiştirebilir ve ayrıca şu şekilde saat dilimi ekleyebilirsiniz:

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

1
Burada gördüğüm en iyi yöntem bu.
LukeVenter

1
Sadece bu cevaba eklemek için (buradaki en doğru cevaptır). xMs unix zaman damgası için küçük harf kullanın . Buradaki belgeler
JonTroncoso

0

Bu örnek gibi düzelttim.

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

Bir yoktur katı mod ve bağışlayandır modu .

Sıkı mod çoğu durumda daha iyi çalışıyor olsa da, anı geçirilen dizenin formatı değişebiliyorsa affetme modu çok yararlı olabilir.

Daha sonraki bir sürümde, ayrıştırıcı varsayılan olarak katı modu kullanacaktır. Katı mod, ayırıcılar da dahil olmak üzere o anki girdinin belirtilen biçimle tam olarak eşleşmesini gerektirir. Sıkı mod, moment fonksiyonuna üçüncü parametre olarak true iletilerek ayarlanır.

Affetme modunun yararlı olduğu yaygın bir senaryo, üçüncü taraf bir API'nın tarihi sağlaması ve söz konusu API için tarih biçiminin değişebileceği durumlardır. Bir API'nin tarihleri ​​'YYYY-AA-GG' biçiminde göndererek başladığını ve daha sonra 'AA / GG / YYYY' biçiminde değiştiğini varsayalım.

Katı modda, aşağıdaki kod 'Geçersiz Tarih' görüntülenmesine neden olur:

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

Bir biçim dizesi kullanarak affetme modunda yanlış bir tarih alırsınız:

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

başka bir yol olurdu

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

0

Bu işlev zaman damgasından tarih oluşturur:

    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
Bu kod OP sorununu çözse de, kodunuzun OP sorununu nasıl ele aldığına dair bir açıklama eklemek en iyisidir. Bu şekilde, gelecekteki ziyaretçiler yayınınızdan bilgi edinebilir ve kendi kodlarına uygulayabilir. SO bir kodlama servisi değil, bilgi kaynağıdır. Ayrıca, yüksek kaliteli ve eksiksiz cevapların kaldırılması daha olasıdır. Bu özellikler, tüm gönderilerin bağımsız olması şartıyla birlikte, bir platform olarak SO'yu forumlardan ayıran güçlü yönlerinden bazılarıdır. Ek bilgi eklemek ve / veya açıklamalarınızı kaynak belgelerle desteklemek için düzenleyebilirsiniz.
ysf
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.