如何判断 DateTime.Now() 是否在不同日期时间之后的一天

mat*_*ode 4 datetime date dart flutter

我在 flutter 上运行这个,但我想这可能是一个更普遍的问题。

我正在首选项中保存日期时间。我希望能够判断是否DateTime.now()在上次保存的日期时间后至少一天,即

(pseudocode)
lastDailyCheck = 2020.04.10
now = 2020.04.11
Run Code Online (Sandbox Code Playgroud)

=> 现在是上次每日检查后的一天。

如果新的一天是 00:01,即使最后一次每日检查是在前一天的 23:58,这也应该已经起作用,这意味着 2 个日期时间之间的差异可以低至分钟。

事实证明这真的很复杂!

这是不起作用的:

DateTime.Now().isAfter(lastDailyCheck)

这只检查现在是否在最后一个之后,它也会在一秒钟后和同一天返回 true。

DateTime.Now().isAfter(lastDailyCheck) && lastDailyCheck.day != DateTime.Now().day

我认为这很聪明。如果这一天不同并且是在最后一天之后,那么它确实可以识别出这是一天之后的事情 - 但后来我意识到当这两天都在该月的 15 日时,它会出错 - 那么lastDailyCheck.day就会相等DateTime.Now().day

您认为这里可能会发生什么?

小智 5

我不知道颤振,但我的方法是不存储最后一次检查,而是存储下一次检查应该发生的日期。因此,当您执行检查时,您会计算下一个午夜并将其存储起来。现在您可以使用 isAfter。

在 JavaScript 中,这看起来像这样:

const now = new Date();

//this also handles overflow into the next month
const nextCheck = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 1)

//store nextCheck somewhere

//in js there is no isAfter, you just use >
if(new Date() > nextCheck) {
   //do the thing
}
Run Code Online (Sandbox Code Playgroud)

当然,你也可以nextCheck每次想要比较时都进行计算,但如果可以避免的话,我不喜欢一遍又一遍地执行相同的计算。

这里要提到的是时区,具体取决于您的日期库,如果您的系统和用户时区一致,您可能需要更改日期。