Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript get localized weekday without a DateTime object

I at the moment have the day values as strings. (e.g. "monday", "tuesday", "wednesday", "thursday", "friday", "saturday", "sunday") but no date.

The days describe opening hours of a shop and I would like to translate these string values dynamically based of the locale set on the shop.

I noticed that JS have the wonderful method Date.prototype.toLocaleDateString() but it doesn't seem like that I can get the localized string without providing a date. How would you go about this?


2 Answers

You can create a dummy date based on the weekday, choosing the year and month such that a day value of 0 matches a Sunday (yes, you can specify the 0th day too).

Then you can use toLocaleDateString with the date to ask for the translated weekday string.

(I also invoked an Intl.DateTimeFormatter here to get the user's default locale, because we cannot specify an options object without also specifying a locale.)

const WEEKDAYS = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday']

function translateWeekday (weekdayString) {
  const weekdayIndex = WEEKDAYS.indexOf(weekdayString.toLowerCase())
  if (weekdayIndex < 0) throw new Error(`Unknown weekday "${weekdayString}"`)

  const dummyDate = new Date(2001, 0, weekdayIndex)
  const locale = new Intl.DateTimeFormat().resolvedOptions().locale

  return dummyDate.toLocaleDateString(locale, { weekday: 'long' })
}

On my machine with German locale, translateWeekday('Wednesday') returns 'Mittwoch' for example.

like image 189
CherryDT Avatar answered Oct 28 '25 22:10

CherryDT


Have a look at Date.prototype.getDay

// First day of the week depends on the order of this array
const weekdays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

const date = new Date();

// get first day of week, and then add the weekday

let day = date.getDate() - date.getDay() + weekdays.indexOf(prompt("Day?", "Monday"));

date.setDate(day)

console.log(date.toString());
like image 44
Lakshaya U. Avatar answered Oct 28 '25 22:10

Lakshaya U.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!