timedelta marks time in days, seconds, and microseconds. It doesn’t take leap years into account because the concept of years is irrelevant to timedelta. If you need to account for leap years, you need a different API.
Because what’s accurate here depends on the context, and the Python example doesn’t hide that from the programmer.
The same dilemma goes for month calculations: does “3 months ago” mean 90 days ago, 91.3 days ago, this many days into the target month, or this many days from the target month’s end (e.g. to account for 28, 29, 30, and 31-day months)?
The Python won’t give an accurate date here because it doesn’t take into account leap years.
timedelta
marks time in days, seconds, and microseconds. It doesn’t take leap years into account because the concept of years is irrelevant totimedelta
. If you need to account for leap years, you need a different API.You can subtract two dates and get the exact time difference.
Because what’s accurate here depends on the context, and the Python example doesn’t hide that from the programmer.
The same dilemma goes for month calculations: does “3 months ago” mean 90 days ago, 91.3 days ago, this many days into the target month, or this many days from the target month’s end (e.g. to account for 28, 29, 30, and 31-day months)?
Does the Ruby version do that though?
I haven’t got it installed to check, but seeing constants like SECONDS_PER_YEAR in the documentation makes me think it’s just as bad if not worse.
https://api.rubyonrails.org/classes/ActiveSupport/Duration.html