如何使用Intl获取工作日名称?

gpb*_*pbl 6 javascript internationalization ecmascript-intl

我想在我的i18n-ed应用程序中显示7个工作日的列表:

Sunday, Monday, Tuesday... Saturday
Run Code Online (Sandbox Code Playgroud)

我靠上国际全局对象格式化的日期/时间,但我无法找到一个简单的方法来获得唯一的工作日名称.

我想我可以在EPOCH时间增加一些时间,以达到一周的第一天,但​​我没有在工作日找到格式化器打印.

var date = new Date(0);
date.setDate(4 + day);
for (var i = 0; i < 7; i++) {
  var weekday = new Intl.DateTimeFormat(["en"], {
      weekday: "short" // ?? what should I put here
  }).format(date);
  console.log(weekday);
}
Run Code Online (Sandbox Code Playgroud)

输出:

Sunday, January 4, 1970
Monday, January 5, 1970
Tuesday, January 6, 1970
Wednesday, January 7, 1970
Thursday, January 8, 1970
Friday, January 9, 1970
Saturday, January 10, 1970
Run Code Online (Sandbox Code Playgroud)

期望的输出:

Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Run Code Online (Sandbox Code Playgroud)

我也希望有一个较短版本的日子,比如Sun, Mon, Tue....

或者,有没有办法从工作日字符串Intl?我试图通过控制台探索对象,但我找不到它们.

fit*_*rec 12

我在 2021 年使用 es6 的解决方案

\n

\r\n
\r\n
/**\n * Return list of days\n *  localeName : name of local, f.e. en-GB, default es-MX\n * \xe2\x9c\x85 weekday    : format of weekday short/long (Default)\n */\nfunction daysForLocale(localeName = \'es-MX\', weekday = \'long\') {\n  const {format} = new Intl.DateTimeFormat(localeName, { weekday });\n  return [...Array(7).keys()]\n    .map((day) => format(new Date(Date.UTC(2021, 5, day))));\n}\n\n// ##############################################################\n// testing daysForLocale function\n// ##############################################################\nconsole.log(daysForLocale());\n// [\'domingo\',\'lunes\',...,\'viernes\',\'s\xc3\xa1bado\']\nconsole.log(daysForLocale(\'en-GB\', \'short\'));\n// [\'Sun\', \'Mon\', \'Tue\', \'Wed\', \'Thu\', \'Fri\',\'Sat\']\nconsole.log(daysForLocale(\'ja-JP\', \'short\'));\n// [\'\xe6\x97\xa5\', \'\xe6\x9c\x88\', \'\xe7\x81\xab\',\'\xe6\xb0\xb4\', \'\xe6\x9c\xa8\', \'\xe9\x87\x91\',\'\xe5\x9c\x9f\']
Run Code Online (Sandbox Code Playgroud)\r\n
\r\n
\r\n

\n


gpb*_*pbl 6

我被误导了,因为我使用的是Intl polyfill,它还不支持{ weekday: "short" }.

使用本机Intl实现按预期工作.


Dom*_*nic 6

 const weekdayDateMap = {
  Mon: new Date('2020-01-06T00:00:00.000Z'),
  Tue: new Date('2020-01-07T00:00:00.000Z'),
  Wed: new Date('2020-01-08T00:00:00.000Z'),
  Thu: new Date('2020-01-09T00:00:00.000Z'),
  Fri: new Date('2020-01-10T00:00:00.000Z'),
  Sat: new Date('2020-01-11T00:00:00.000Z'),
  Sun: new Date('2020-01-12T00:00:00.000Z'),
};
const shortWeekdays = Object.keys(weekdayDateMap);

const getDayOfWeek = (shortName, locale = 'en-US', length = 'short') =>
  new Intl.DateTimeFormat(locale, { weekday: length }).format(weekdayDateMap[shortName]);

const getDaysOfWeek = (locale = 'en-US', length = 'short') =>
  shortWeekdays.map(shortName => getDayOfWeek(shortName, locale, length));


console.log(getDayOfWeek('Mon', 'de-DE')) // "Mo"

console.log(getDaysOfWeek('de-DE')) // ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
Run Code Online (Sandbox Code Playgroud)

笔记:

如果您Intl.DateTimeFormat每秒多次调用格式化程序,则创建一次格式化程序并重新使用它会更有效。