Moment.js ile tarihi nasıl kaldırabilirim?


268
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LLL');
};

Görüntüleniyor: "28 Şubat 2013 09:24"

Ama sonunda zamanı kaldırmak istiyorum. Bunu nasıl yapabilirim?

Moment.js kullanıyorum .


Dizeleri ayırmak için Split yöntemini kullanın
AmGates

Yanıtlar:


605

Çok geç atladığım için üzgünüm, ancak biçimlendirmek yerine zaman bölümünü kaldırmak istiyorsanız , kod şöyledir:moment()

.startOf('day')

Ref: http://momentjs.com/docs/#/manipulating/start-of/


90
Zaman dilimleri arasında gidiyorsanız (ya da zaman dilimlerine dikkat etmiyorsanız) buna dikkat edin. Benim UTC tarih, yerel saate dönüştürülür başlamıştı sorunu vardı sonra uygulayarak startOf('day')ardından başlangıcıydı, önceki gün. Düzeltildimoment(moment.utc('2013-10-29T00:00:00+00:00').startOf('day').format('LL')).startOf('day').toDate()
Colllin

26
Ayrıca, bu işlevin orijinal nesneyi gerçekten değiştirdiğine dikkat edin
Dirk Boer

6
.startOf('day')zaman bölümünü kendiliğinden kaldırmaz, sadece zamanı 00:00:00 olarak ayarlar. Yani, evet, 'collin' tarafından yorumlandığı gibi, tarih kaydederken dikkatli olmalısınız. format('LL')Bu iş parçacığında yanıtlandığı gibi daha iyi bir alternatif kullanıyor .
Sudarshan_SMD

4
Orijinal nesneyi değiştirmekten kaçınmak için someMoment.clone().startOf('day')veya düğmesini kullanın moment(someMoment).startOf('day').
Pang

Dikkatli olun, startOf ('day') her şeyi sıfırlar ve sadece saati 00:00:00 olarak ayarlamaz. moment().utc().add(1,'d').startOf('day')nesneyi bugün sıfırlayacak.
Tristan

50

kullanım format('LL')

Onunla ne yapmaya çalıştığınıza bağlı olarak format('LL'), hile yapabilir. Bunun gibi bir şey üretir:

Moment().format('LL'); // => April 29, 2016

26

Doğru yol, girişi size daha fazla esneklik sağlayacak gereksiniminize göre belirtmek olacaktır.

Mevcut tanım aşağıdakileri içerir

LTS : 'h:mm:ss A', LT : 'h:mm A', L : 'MM/DD/YYYY', LL : 'MMMM D, YYYY', LLL : 'MMMM D, YYYY h:mm A', LLLL : 'dddd, MMMM D, YYYY h:mm A'

Bunlardan herhangi birini kullanabilir veya moment (). Biçimine () geçirilen girişi değiştirebilirsiniz. Örneğin, davanız için geçebilirsiniz moment.utc(dateTime).format('MMMM D, YYYY').


9
formatCalendarDate = function (dateTime) {
    return moment.utc(dateTime).format('LL')
}

6

Bu biçimi de kullanabilirsiniz:

moment().format('ddd, ll'); // Wed, Jan 4, 2017


6

Moment.js'nin daha yeni sürümleriyle bunu da yapabilirsiniz:

var dateTime = moment();

var dateValue = moment({
    year: dateTime.year(),
    month: dateTime.month(),
    day: dateTime.date()
});

Bkz . Http://momentjs.com/docs/#/parsing/object/ .


date: dateTime.date()Bunun yerine olmaz day: dateTime.date()mı?
philfreo

1
'gün ve tarih anahtarı hem ayın günü anlamına gelir.' dokümanlar. day2.8.4 öncesi çalışır.
oldwizard


4

moment.jsKütüphaneyi her kullandığımda istenilen biçimi bu şekilde belirtirim:

moment(<your Date goes here>).format("DD-MMM-YYYY")

veya

moment(<your Date goes here>).format("DD/MMM/YYYY")

... vb umarım fikir alırsın

Biçim işlevinin içine istediğiniz biçimi koyarsınız. Yukarıdaki örnek, dakika ve saniye gibi tarihten itibaren istenmeyen tüm öğelerden kurtulur.


İçeriğinizi farklı yerlerde görüntülemek istiyorsanız, bu iyi bir fikir değildir. Kullanıcının yerel ayar için doğru biçimde ekran tarihlere istiyorsanız, önceden ayarlanmış tarih biçimlerinden birini (kullanmak gerekir L, LLvs.)
AJ Richardson

MMM'yi neden üç kez ayarladınız?
Menai Ala Eddine - Aladdin

MMM size ayın ilk 3 harfini verecektir. 'Nis' MMMM size tam bir ay adı verecek
Adrian Grzywaczewski

4

Benim gibi insanlar için uzun tarih biçimini ( LLLL) istiyorlar, ancak günün saati olmadan, bunun için bir GitHub sorunu var: https://github.com/moment/moment/issues/2505 . Şimdilik bir çözüm var:

var localeData = moment.localeData( moment.locale() ),
    llll = localeData.longDateFormat( 'llll' ),
    lll = localeData.longDateFormat( 'lll' ),
    ll = localeData.longDateFormat( 'll' ),
    longDateFormat = llll.replace( lll.replace( ll, '' ), '' );
var formattedDate = myMoment.format(longDateFormat);

1
Sonunda mantıklı bir cevap. Benim oyumu al efendim! Sorun henüz çözülmedi gibi görünüyor.
oyalhi

3

Bu yapıcıyı kullanabilirsiniz

moment({h:0, m:0, s:0, ms:0})

http://momentjs.com/docs/#/parsing/object/

console.log( moment().format('YYYY-MM-DD HH:mm:ss') )

console.log( moment({h:0, m:0, s:0, ms:0}).format('YYYY-MM-DD HH:mm:ss') )
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>


Buraya bazı cevher açıklamaları ekleyin
Mathews Sunny

Bu ilginç! Bir an yaratıyor ve saat, dakika ve saniyeleri geçersiz kılıyor, ancak hala gizli tarihi koruyor. İlginç, çünkü moment({h:0, m:0, s:0, ms:0})bana bugün değil, 1 Ocak 1970'i vereceğini tahmin ederdim.
Simon_Weaver

Aynı şekilde görünüyor moment({ h: 0 }).
Simon_Weaver

1
Dokümanlar diyorOmitted units default to 0 or the current date, month, and year.
Simon_Weaver

2

Bunu dene:

moment.format().split("T")[0]

Olarak, bu yöntemle dikkat 1993-06-07T22:00:00.000Zolarak sonuçlanacaktır 1993-06-07o günün başlangıcıdır oysa1993-06-08
Tom
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.