我想检测一个日期是否在昨天。我只有一个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");
}