-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[REF] dates: introduce DateTime to wrap Date object
This commit prepares the ground for a fix (next commit). The issue --------- Steps to reproduce: - change your machine timezone to Jakarta - enter "3/8/2023" in a cell => it becomes "3/7/2023" Other steps to reproduce: - change your machine timezone to Jakarta - npm run test => some tests are failing. Spreadsheet date times are naive date times, they do not carry any timezone information. A date(time) in spreadsheet is just a number with a format after all. We are currently using javascript native Date objects everywhere in the code to represent spreadsheet dates. And we are mixing UTC (new Date(timestamp)) and localized Dates (new Date(year, month, day, ...)) at some places. This is a mistake. Because of an (un)lucky combination of mistakes, it mostly works by chance for most timezones. But going back to the faulty Jakarta case: one can notice that INITIAL_1900_DAY is UTC+0707 while INITIAL_JS_DAY is UTC+0700 (7 minutes offset). The timezone offset changed over time. Some of the mistakes where we mix up things: - INITIAL_1900_DAY is localized, but INITIAL_JS_DAY is UTC. - numberToJsDate: we create the date from the value as if it was UTC, but then set the time as if it was localized. This commit ----------- This commit prepares the ground for the real fix (next commit). The idea to fix the issue is to avoid mixing localized and UTC Dates. To represent naive date times, we will always use UTC Date objects. we introduce a wrapper around the Date native object for two reasons: - the business code should not know or care about timezones/UTC - manipulating Date is error prone. It's easy to mess up local vs UTC (as this bug fix has shown) With this [REF] commit, the behavior does not change. We still mix localised (`new DateTime(...)`) and UTC (`DateTime.fromTimestamp(...)`). The change comes with the next commit. For the future, we could also improve the `DateTime` API, compared to the poor `Date` API. For stable version however, we keep the changes to the minimum and keep the Date API Task: 3666703 Part-of: #3396
- Loading branch information
1 parent
668e65b
commit fea81ee
Showing
7 changed files
with
266 additions
and
197 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.