J'essaie avec moment.js de savoir si une date est aujourd'hui, hier, il y a une semaine ou plus ancienne (il y a deux semaines ou plus).
Je l'ai déjà fait pour les deux premiers cas:
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
Est-ce exact?
Cependant, comment puis-je vérifier si une date date d'une semaine ou plus (par exemple il y a deux semaines)?
Voici quelque chose qui peut être utile:
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")));
Vérifiez une démo de JSFiddle avec plus de tests, afin de pouvoir ajuster votre cas exact, si nécessaire.
Réponse plus précise comme suit
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');
A partir de la version 2.14, vous pouvez personnaliser la fonction calendar()
moment().calendar(YOUR_DATE, {
sameDay: function (now) {
if (this.isBefore(now)) {
return '[Will Happen Today]';
} else {
return '[Happened Today]';
}
/* ... */
}
});
Ceci est conçu pour les événements de type "calendrier".
Le moment contient déjà une logique de cette nature
Vous pouvez consulter leur code source pour le code humanize
https://github.com/moment/moment/blob/ed1fc742b179708d0a987a639979178616309f93/src/lib/during/humanize.js
et la logique fromNow
J'ai trouvé cela utile pour voir comment ils l'ont fait.
La façon dont vous formatez la chaîne dépend de votre entreprise et, pour être honnête, la logique intégrée ne la coupera probablement pas la plupart du temps. Cela semble logique pour la date d'un "article" où "il y a quelques jours" est acceptable, mais je suis en train de suivre les colis par courrier et de dire "Votre colis expédié il y a quelques jours" n'est tout simplement pas suffisant.