Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes <date-field>-between functions for moments: #5

Merged
merged 1 commit into from
Apr 13, 2015

Conversation

97jaz
Copy link
Owner

@97jaz 97jaz commented Apr 13, 2015

Previously, all between functions operated on the result
of ->datetime/utc on their inputs. This is a problem for
moments, since it makes the date computations timezone-sensitive.
For example, the bug report I received had:

(days-between (moment 2015 3 29 #:tz "Europe/Berlin")
              (moment 2015 3 30 #:tz "Europe/Berlin"))

returning 0 instead of the expected 1. That's because that day
happens to include the start of daylight saving time, so the
local timeline is missing an hour. Consequently, when we
translate these to UTC datetimes, they're within a day of each
other.

The fix is to transform the second argument into a local datetime
based on the requirements of the first argument. In most cases,
the requirements are trivial; dates and datetimes are always
transformed using ->datetime/local, no matter what the first
argument is. But if both arguments have time zones, then the second
argument is first adjusted into the time zone of the first. Then,
the local datetime component is used.

Previously, all `between` functions operated on the result
of `->datetime/utc` on their inputs. This is a problem for
moments, since it makes the date computations timezone-sensitive.
For example, the bug report I received had:
```racket
(days-between (moment 2015 3 29 #:tz "Europe/Berlin")
              (moment 2015 3 30 #:tz "Europe/Berlin"))
```
returning 0 instead of the expected 1. That's because that day
happens to include the start of daylight saving time, so the
local timeline is missing an hour. Consequently, when we
translate these to UTC datetimes, they're within a day of each
other.

The fix is to transform the second argument into a local datetime
based on the requirements of the first argument. In most cases,
the requirements are trivial; dates and datetimes are always
transformed using `->datetime/local`, no matter what the first
argument is. But if both arguments have time zones, then the second
argument is first adjusted into the time zone of the first. Then,
the local datetime component is used.
97jaz added a commit that referenced this pull request Apr 13, 2015
Fixes <date-field>-between functions for moments:
@97jaz 97jaz merged commit 7be6993 into master Apr 13, 2015
@97jaz 97jaz deleted the moment-difference branch April 13, 2015 01:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant