This is how I'm getting the date's week day
const date = new Date('2022-06-25T' hour ':00:00.951Z')
const day1 = date.toLocaleString('en-US', { weekday: 'short' })
And this is how I'm constructing the date
`${date.getUTCDate()} ${date.toLocaleString('en-GB', { month: 'short' })} ${date.getUTCFullYear()}`
But apparently fails for some dates in certain hours (this is the screenshot i was sent)
If you notice the 25 of June and the 26 of June are actually Saturday and Sunday. So both date/day are not synced
After searching a bit online I found this implementation (that uses UTC function)
const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
const d = new Date();
let day = weekdays[d.getUTCDay()];
And I Did this little script to compare the result for 25th of June
const weekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
for (i = 0; i < 24; i ) {
const hour = i < 10 ? '0' i : i;
const date = new Date('2022-06-25T' hour ':00:00.951Z')
const day1 = date.toLocaleString('en-US', { weekday: 'short', timeZone: 'Asia/Tbilisi' })
const day2 = weekdays[date.getUTCDay()]
console.log('2022-06-25 at', hour, day1, day2)
}
And you can see in the devtools that is not returning same day after 20h
2022-06-25 at 00 Sat Sat
2022-06-25 at 01 Sat Sat
2022-06-25 at 02 Sat Sat
2022-06-25 at 03 Sat Sat
2022-06-25 at 04 Sat Sat
2022-06-25 at 05 Sat Sat
2022-06-25 at 06 Sat Sat
2022-06-25 at 07 Sat Sat
2022-06-25 at 08 Sat Sat
2022-06-25 at 09 Sat Sat
2022-06-25 at 10 Sat Sat
2022-06-25 at 11 Sat Sat
2022-06-25 at 12 Sat Sat
2022-06-25 at 13 Sat Sat
2022-06-25 at 14 Sat Sat
2022-06-25 at 15 Sat Sat
2022-06-25 at 16 Sat Sat
2022-06-25 at 17 Sat Sat
2022-06-25 at 18 Sat Sat
2022-06-25 at 19 Sat Sat
2022-06-25 at 20 Sun Sat
2022-06-25 at 21 Sun Sat
2022-06-25 at 22 Sun Sat
2022-06-25 at 23 Sun Sat
So wat's the most reliable way to get the week day name?
CodePudding user response:
const date = new Date(Date.UTC(2022, 5, 25, 3, 23, 16, 738));
const weekday = new Intl.DateTimeFormat('en-GB', { weekday: 'short' }).format(date)
console.log(weekday)
CodePudding user response:
new Date('2022-06-25T' hour ':00:00.951Z')
Is parsed as UTC (provided hour is padded to 2 digits), so far so good.
date.toLocaleString('en-US', { weekday: 'short', timeZone: 'Asia/Tbilisi' })
Gets the local day name in Asia/Tbilisi, which is 4 all year round. So for UTC times after 20:00, the local day will be the next day. To get the UTC day, use timeZone: 'UTC'
in the options, e.g.
// Current UTC day
console.log(new Date().toLocaleString('en',{weekday: 'short', timeZone: 'UTC'}));
Note that UTC isn't a timezone, it's actually the opposite, it's a standard that defines a datum from which all offsets (and hence timezones) are measured.