moment.js - 测试日期是今天,昨天,一周还是两周前

Wil*_*ier 39 javascript date momentjs

我正在尝试使用moment.js来确定日期是今天,昨天,1周前还是更早(2周前或更长时间).

我已经为前两种情况做了这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

那是对的吗?

但是,我如何检查日期是一周前还是更早(例如两周前)?

acd*_*ior 78

这是有用的东西:

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")));
Run Code Online (Sandbox Code Playgroud)

通过更多测试检查JSFiddle演示,以便根据需要调整您的确切案例.

  • 是的,那是因为`moment()`对象是可变的.如果你调用`someDate.subtract()`,它实际上会改变`someDate`的值.在许多语言中,日期对象是不可变的,因此moment.js的可变性确实会产生奇怪的结果. (5认同)

Gur*_*der 19

更准确的答案如下

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');
Run Code Online (Sandbox Code Playgroud)


小智 7

当今最简单的解决方案:

const result = moment(date).isSame(moment(), "day")
Run Code Online (Sandbox Code Playgroud)

昨天最简单的解决方案:

const result = moment(date).isSame(moment().subtract(1, 'day'), "day")
Run Code Online (Sandbox Code Playgroud)