有没有一种安全的方法可以检测约会是否在昨天



我想检测一个日期是否在昨天。我只有一个UTC日期字符串可用于我在用户导航语言上指定的格式:

let dateStr = "2020-04-07 15:36:55";
let utcDate = new Date(`${ dateStr }Z`.replace(" ", 'T'));
let formattedUtcDate = new Date(utcDate).toLocaleDateString(navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
});
let currentDate = new Date().toLocaleDateString(navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
});
if (formattedUtcDate === currentDate) {
console.log("Today");
} else if (true) { //????????
console.log("Yesterday");
}

知道吗?我不能使用我在SO上找到的时间戳解决方案。所以必须有另一种方法来处理这个问题。

您非常接近解决方案。。。

请记住,new Date()构造函数可以有参数,如年、月、日、小时、分钟和秒,例如:

new Date(2020, 3, 7, 0, 0, 0) // month is 0 based! 3 = April

加上0,0,0来表示时间,就会得到给定日期当天的开始,再加上这个新信息,就可以计算出每天的开始:

var now = new Date()
var startOfDay = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 0, 0, 0)

要获取UTC值,请使用UTC getters:

  • getUTCFullYear()
  • getUTCMonth()
  • getUTCDate()

如果您想找到endOfDay(使用23, 59, 59)和时间(,然后您可以比较.getTime(),以实际比较给定日期是否为:

if (utcDate.getTime() < startOfDay.getTime()) ... // past
else if (utcDate.getTime() > endOfDay.getTime()) ... // future
else ... // today

在上面的代码中,您可以省略.getTime(),因为Javascript将推断出这样的操作

您也可以通过为昨天创建一个日期对象来轻松完成此操作。为此,从当前时间(用Date.now()表示(减去86400000毫秒(一天,24 * 60 * 60 * 1000 = 86400000(:

let dateStr = "2020-04-06 15:36:55";
let utcDate = new Date(`${ dateStr }Z`.replace(" ", 'T'));
let formattedUtcDate = new Date(utcDate).toLocaleDateString(navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
});
let currentDate = new Date().toLocaleDateString(navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
});
let yesterdayDate = new Date(Date.now() - 86400000).toLocaleDateString(navigator.language, {
day: "2-digit",
month: "2-digit",
year: "numeric"
});
if (formattedUtcDate === currentDate) {
console.log("Today");
} else if (formattedUtcDate === yesterdayDate) {
console.log("Yesterday");
}

最新更新