如何根据纯 Javascript 中的语言环境确定一周是从星期一还是星期日开始?

Ole*_*nyk 3 javascript date weekday

嗯,标题非常具有解释性——我需要弄清楚本地的星期几开始——它可以是星期一、星期日、星期六或星期五——在纯 Javascript 中。

我发现这个/sf/answers/50927551/

<firstDay day="mon" territories="001 AD AI AL AM AN AT AX AZ BA BE BG BM BN BY CH CL CM CR CY CZ DE DK EC EE ES FI FJ FO FR GB GE GF GP GR HR HU IS IT KG KZ LB LI LK LT LU LV MC MD ME MK MN MQ MY NL NO PL PT RE RO RS RU SE SI SK SM TJ TM TR UA UY UZ VA VN XK" />
<firstDay day="fri" territories="BD MV" />
<firstDay day="sat" territories="AE AF BH DJ DZ EG IQ IR JO KW LY MA OM QA SD SY" />
<firstDay day="sun" territories="AG AR AS AU BR BS BT BW BZ CA CN CO DM DO ET GT GU HK HN ID IE IL IN JM JP KE KH KR LA MH MM MO MT MX MZ NI NP NZ PA PE PH PK PR PY SA SG SV TH TN TT TW UM US VE VI WS YE ZA ZW" />
<firstDay day="sun" territories="GB" alt="variant" references="Shorter Oxford Dictionary (5th edition, 2002)" />
Run Code Online (Sandbox Code Playgroud)

找到了 ISO3166 和 ISO639 代码的兼容表 - https://wiki.openstreetmap.org/wiki/Nominatim/Country_Codes

Ada*_*ett 8

没有一刻。本质上是https://github.com/gamtiq/weekstart 的重磅版本,忽略了一些不寻常的语言环境。没有纯 JS 答案(使用截至 2020 年可用的 API)是完美的,但这将产生与系统 API 相同的结果,至少 99.9% 的用户。

https://github.com/tc39/proposal-intl-locale-info已经提出,其中将包含一个 API 级别的解决方案。

function weekStart(region, language) {
  const regionSat = 'AEAFBHDJDZEGIQIRJOKWLYOMQASDSY'.match(/../g);
  const regionSun = 'AGARASAUBDBRBSBTBWBZCACNCODMDOETGTGUHKHNIDILINJMJPKEKHKRLAMHMMMOMTMXMZNINPPAPEPHPKPRPTPYSASGSVTHTTTWUMUSVEVIWSYEZAZW'.match(/../g);
  const languageSat = ['ar','arq','arz','fa'];
  const languageSun = 'amasbndzengnguhehiidjajvkmknkolomhmlmrmtmyneomorpapssdsmsnsutatethtnurzhzu'.match(/../g);

  return (
    region ? (
      regionSun.includes(region) ? 'sun' :
      regionSat.includes(region) ? 'sat' : 'mon') : (
      languageSun.includes(language) ? 'sun' :
      languageSat.includes(language) ? 'sat' : 'mon'));
}

function weekStartLocale(locale) {
  const parts = locale.match(/^([a-z]{2,3})(?:-([a-z]{3})(?=$|-))?(?:-([a-z]{4})(?=$|-))?(?:-([a-z]{2}|\d{3})(?=$|-))?/i);
  return weekStart(parts[4], parts[1]);
}

console.log(weekStartLocale(navigator.language));
console.log(weekStartLocale('en'));
console.log(weekStartLocale('en-GB'));
console.log(weekStartLocale('ar-AE'));
Run Code Online (Sandbox Code Playgroud)


Mat*_*att -3

你可以使用 moment.js

moment.localeData('en-us').firstDayOfWeek();
Run Code Online (Sandbox Code Playgroud)

至于纯js,你必须自己制作查找表。您可以使用momentjs源代码作为参考。 https://github.com/moment/moment/tree/develop/locale

在每个区域设置文件中查找dow配置末尾的 。