dayjs
dayjs copied to clipboard
Having some issues when use a timezone with zero offset with locale method
I'm having some issues with parsing timezones with zero offsets.
Issue description
I have unexpected results when applying locale for the dayjs
object in UTC and timezone with zero offsets. When I call the locale
method after .tz()
looks like the locale
method is changed date-time according to my local time. But with timezones which is different from UTC, everything works fine.
Code
My plugins
import dayjs from 'dayjs';
import advancedFormat from 'dayjs/plugin/advancedFormat';
import calendar from 'dayjs/plugin/calendar';
import customParseFormat from 'dayjs/plugin/customParseFormat';
import localizedFormat from 'dayjs/plugin/localizedFormat';
import timezone from 'dayjs/plugin/timezone';
import utc from 'dayjs/plugin/utc';
dayjs.extend(advancedFormat);
dayjs.extend(customParseFormat);
dayjs.extend(utc);
dayjs.extend(localizedFormat);
dayjs.extend(timezone);
dayjs.extend(calendar);
I don't import locales here, but I import them dynamically after a user selects a specific locale.
Code with issues
dayjs.utc(date).tz(timeZone).locale(locale).format(localizedFormats[dateFormat])
The date argument in that case is a date string in ISO format. Timezone is the string, locale is the string with one of the dayjs locales. Everything works fine until I pass the timezone with zero offsets. I've tried to test this behavior and found that the issue is probably in the clone
method
Logs
Date argument is 2022-02-27T11:05:51.439Z
in ISO format
Code
console.log('only timezone', dayjs.utc(date).tz(timeZone));
console.log('timezone + locale', dayjs.utc(date).tz(timeZone).locale(locale));
console.log('clone + timezone', dayjs.utc(date).tz(timeZone).clone());
Results
- With zero offset
- With non-zero offset
Expected behavior
The date and time should be the same after locale
method call
Information
- Day.js Version:
1.11.7
- OS:
Windows 10 (64-bit)
- Browser:
Firefox 110.0 (64-bit)
- Time zone:
Europe/Warsaw [UTC + 01:00]
+1
@iamkun Do you know this issue?
I've got the same problem when I passed in the timezone "UTC":
dayjs.tz("2023-12-06T07:43:14.674Z", "UTC").locale("en").format("LT")
returns wrong value 12:43 AM
dayjs.tz("2023-12-06T07:43:14.674Z", "UTC").format("LT")
returns the expected value 7:43 AM