有没有一种安全的方法可以检测日期是否是昨天?

时间:2020-04-07 17:19:53

标签: javascript

我想检测日期是否是昨天。我只有一个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上使用这里的时间戳解决方案。因此,必须有另一种处理方式。

2 个答案:

答案 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");
}