Ich versuche mit moment.js herauszufinden, ob ein Datum heute, gestern, vor einer Woche oder älter ist (mindestens 2 Wochen).
Ich habe das bereits für die ersten beiden Fälle getan:
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
Ist das korrekt?
Wie kann ich jedoch überprüfen, ob ein Datum vor einer Woche oder älter ist (z. B. vor zwei Wochen)?
Hier ist etwas, das nützlich sein kann:
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")));
Überprüfen Sie eine JSFiddle-Demo mit mehr Tests, damit Sie bei Bedarf den genauen Fall anpassen können.
Genauere Antwort wie folgt
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');
Ab Version 2.14 können Sie die Funktion calendar()
anpassen
moment().calendar(YOUR_DATE, {
sameDay: function (now) {
if (this.isBefore(now)) {
return '[Will Happen Today]';
} else {
return '[Happened Today]';
}
/* ... */
}
});
Dies ist für Ereignisse vom Typ "Kalender" vorgesehen.
Der Moment enthält bereits eine solche Logik
Sie können den Quellcode für den humanize
-Code betrachten https://github.com/moment/moment/blob/ed1fc742b179708d0a987a639979178616309f93/src/lib/duration/humanize.js
und die fromNow
-Logik
Ich fand das nützlich, um zu sehen, wie sie es machten.
Die Art und Weise, wie Sie die Zeichenfolge formatieren, hängt von Ihrem Unternehmen ab. Um ehrlich zu sein, wird die integrierte Logik die meiste Zeit wahrscheinlich nicht beeinträchtigen. Es scheint sinnvoll für das Datum eines "Post" zu sein, bei dem "vor ein paar Tagen" in Ordnung ist, aber ich verfolge Pakete in der Post und sage "Ihr Paket wurde vor wenigen Tagen verschickt" ist einfach nicht gut genug.