2015-06-05 26 views
20

Bir tarihin bugün, dün, bir hafta önce veya daha büyük olduğunu öğrenmek için moment.js ile çalışıyorum (2 hafta önce yada daha fazla).moment.js - bugün bir tarihin olup olmadığını test edin, dün, bir hafta ya da iki hafta önce

Zaten ilk iki durum için o yapılır:

var today = moment().startOf('day'); 
var yesterday = moment().subtract(1, 'days').startOf('day'); 

if (moment(localTime).isSame(today, 'd')) // today 
    // do something 
if (moment(localTime).isSame(yesterday, 'd')) // yesterday 
    // do something 

Doğru mu? Ancak, bir tarihin bir hafta önce mi yoksa daha eski mi (örneğin iki hafta önce mi) olduğunu nasıl kontrol edebilirim?

+1

"1 hafta önce" nedir? Dünden önce, ama son cumadan sonra (çünkü bugün cuma)? – acdcjunior

+0

Sadece isBefore' ve 'isAfter' işlevlerini mi arıyorsunuz? Ya da başka bir şey? –

+0

@acdcjunior Anladım, bu kadar da kötü. 7 gün önce söylemeliyim. –

cevap

47

Burada yararlı olabilir bir şey: Daha fazla testlerle

var REFERENCE = moment("2015-06-05"); // fixed just for testing, use moment(); 
var TODAY = REFERENCE.clone().startOf('day'); 
var YESTERDAY = REFERENCE.clone().subtract(1, 'days').startOf('day'); 
var A_WEEK_OLD = REFERENCE.clone().subtract(7, 'days').startOf('day'); 

function isToday(momentDate) { 
    return momentDate.isSame(TODAY, 'd'); 
} 
function isYesterday(momentDate) { 
    return momentDate.isSame(YESTERDAY, 'd'); 
} 
function isWithinAWeek(momentDate) { 
    return momentDate.isAfter(A_WEEK_OLD); 
} 
function isTwoWeeksOrMore(momentDate) { 
    return !isWithinAWeek(momentDate); 
} 

console.log("is it today? ..................Should be true: "+isToday(moment("2015-06-05"))); 
console.log("is it yesterday? ..............Should be true: "+isYesterday(moment("2015-06-04"))); 
console.log("is it within a week? ..........Should be true: "+isWithinAWeek(moment("2015-06-03"))); 
console.log("is it within a week? ..........Should be false: "+isWithinAWeek(moment("2015-05-29"))); 
console.log("is it two weeks older or more? Should be false: "+isTwoWeeksOrMore(moment("2015-05-30"))); 
console.log("is it two weeks older or more? Should be true: "+isTwoWeeksOrMore(moment("2015-05-29"))); 

Check a JSFiddle demo, böylece gerekirse, tam durum için ince ayar yapabilirsiniz.

+0

Çok hoş. Bunu kendim başarmaya çalışıyordum ve çözümünüzden çok uzak değildim, sadece 'clone()' ı unuttum ve bunun için garip sonuçlar aldım. –

+4

Evet, çünkü moment() 'nesneleri değişebilir. Eğer 'someDate.subtract() 'adını verirseniz, aslında' someDate 'değerini değiştirir. Birçok dilde tarih nesneleri değişmezdir, dolayısıyla moment.js'in mutabilitesi gerçekten garip sonuçlar verebilir. – acdcjunior

+0

AOWEEK_OLD – Jonah

8

Daha hassas cevap

var today = moment(); 
var yesterday = moment().subtract(1, 'day'); 

var engagementDate = (Date to be compare); 

if(moment(engagementDate).isSame(today, 'day')) 
    console.log('Today'); 
else if(moment(engagementDate).isSame(yesterday, 'day')) 
    console.log('Yesterday'); 
3

diff fonksiyonu, genel olarak, dava için yararlı ve olabilecek bir tarih

var sampleDaysAgo = moment().subtract(28, 'days'); //28 just for test 
var today = moment(); 

console.log(today.diff(sampleDaysAgo, 'days')); // 28 

Demo

0

beri tam gün için kontrol etmek şöyle Moment zaten bu Doğanın bazı mantıklarını içeriyor

Benim nasıl yaptıklarını görmek için bu yararlı buldu humanize kodu https://github.com/moment/moment/blob/ed1fc742b179708d0a987a639979178616309f93/src/lib/duration/humanize.js

ve fromNow mantık https://github.com/moment/moment/blob/497f918515ae6ab900f008f19523b1e4ae5e2450/src/lib/moment/from.js

için kendi kaynak koduna bakmak isteyebilirsiniz.

Dizgiyi biçimlendirme biçiminiz işletmenize bağlı olacaktır ve dürüst olmak gerekirse, yerleşik mantık muhtemelen büyük ölçüde kesmeyecektir. 'Birkaç gün önce' bir 'posta' tarihi için mantıklı geliyor gibi görünüyor ama paketlerde paketleri izliyorum ve 'Paketiniz birkaç gün önce gönderildi' diyerek yeterince iyi değil. sürümü 2.14 itibaren

0

itibaren size calendar() fonksiyonunu

moment().calendar(YOUR_DATE, { 
    sameDay: function (now) { 
    if (this.isBefore(now)) { 
     return '[Will Happen Today]'; 
    } else { 
     return '[Happened Today]'; 
    } 
    /* ... */ 
    } 
}); 

Bu 'takvim' türü olaylar için tasarlanmıştır özelleştirebilirsiniz.

http://momentjs.com/docs/#/displaying/calendar-time/

İlgili konular