Home > OS >  What's the most reliable way to get the week day from a utc Date
What's the most reliable way to get the week day from a utc Date

Time:06-29

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) enter image description here

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.

  • Related