This change correctly aligns the name of the day in the
current zone with the start of the data for the
equivalent day in the profile's zone. This makes it so
that viewing a day to day report in any timezone works
going both east and west directions.
Ensure that the test fixtures will return; the previous changes
correctly forward the time to end of day across zones and
datelines. One side effect is that the date formatted for the end
of the day uses all the microseconds for the day as well. This
changes the query from the form of 23:59:59.000Z to 23:59:59.999Z.
This also ensures that anything that happens during that one second
will be included rather than excluded.
To illustrate the difference, I used chrome "sensors" feature to change my
timezone to one that spans the dateline.
> moment.tz('2023-01-19', 'America/Los_Angeles').endOf('day').format( )
'2023-01-19T23:59:59-08:00'
> moment.tz(moment('2023-01-19'), 'America/Los_Angeles').endOf('day').format( )
'2023-01-18T23:59:59-08:00'
The old code uses a string replacement, which is equivalent to the first
test. This causes the dates on the reports to be off by one, as well as
risks the data wrapping around the dateline so it can't be seen. For example,
replacing "23:59:59" with "00:00:00" in the first example doesn't correctly
wrap around the dateline.
The patch introduces a way to parse the dates requested in the browser's
time zone, and then translates them to the profile's timezone. The
difference is shown in the second example above. With this change, the
correct date label should be rendered, and the data should start at
midnight without wrapping around the dateline.
This fixes the label on the days in the daytoday charts. Passing a moment
object that is already zoned prevents toLocaleDateString from reinterpreting
the zone information when the date is already relative to the profile.
This also ensures that the datefilter is adjusted to the profile's zone rather
than truncating the time to the end or beginning of the day. This should
prevent incorrectly wrapping arounnd the dateline.
* Experimental branch that replaces momentjs with dayjs in the client
* Revert unintentional change
* feat
* Turns out dayjs is a no-go, but this has some good restructuring so submitting that