Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I tell if DateTime.Now() is on a day AFTER a different DateTime

I'm running this on flutter, but I guess this could be a more general issue.

I am saving a DateTime in the preferences. I want to be able to then tell if DateTime.now() is on at least a day after the last saved DateTime, i.e.

(pseudocode)
lastDailyCheck = 2020.04.10
now = 2020.04.11

=> now is a day after the lastDailyCheck.

This should already work if it is 00:01 on the new day, even if the lastDailyCheck was on 23:58 the day before, meaning the difference can be as low as minutes between the 2 DateTimes.

Turns out this is really complicated!

Here's what doesn't work:

DateTime.Now().isAfter(lastDailyCheck)

This only checks if now is after the last one, it also return true after a second, and on the same day.

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

I thought this was clever. If the day is different and it is after the last then it does work in recognizing it is a day later - but then I realized it would bug out when both days are say on the 15th of the month - then lastDailyCheck.day would equal DateTime.Now().day.

What do you think would be possible here?

like image 690
matthias_code Avatar asked Oct 21 '25 16:10

matthias_code


1 Answers

I don't know flutter, but my approach would be to not store the last check, but store the date at which the next check should occur. So when you perform a check you calculate the next midnight and store that. Now you can use isAfter.

In javascript this would look something like this:

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
}

of course you could also calculate nextCheck every time you want to compare it, but I dislike performing the same calculation over and over if I can avoid it.

A thing to mention here is timezones, depending on your date library and if your system and user timezones align, you may need to shift the date.

like image 170
Rialgar Avatar answered Oct 23 '25 06:10

Rialgar