我想检测日期是否是昨天。我只有一个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上使用这里的时间戳解决方案。因此,必须有另一种处理方式。
答案 0 :(得分:0)
您非常接近解决方案...
请记住,new Date()
constructor can have parameters分别是年,月,日,时,分和秒,例如:
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 getter:
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会推断出这种操作
答案 1 :(得分:0)
您也可以通过为昨天创建日期对象来轻松完成此操作。为此,请从当前时间(以86400000
表示)中减去24 * 60 * 60 * 1000 = 86400000
毫秒(一天,Date.now()
):
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");
}