簡體   English   中英

如何根據純 Javascript 中的區域設置確定一周是從星期一還是星期日開始?

[英]How can I determine if week starts on Monday or Sunday based on locale in pure Javascript?

好吧,標題很好解釋——我需要弄清楚當地的星期幾開始——它可以是星期一、星期日、星期六或星期五——純 Javascript。

我發現這個https://stackoverflow.com/a/727536/1226226

<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)" />

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

沒有一刻。 本質上是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(/^([az]{2,3})(?:-([az]{3})(?=$|-))?(?:-([az]{4})(?=$|-))?(?:-([az]{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'));

基於CLDR的更易於維護和使用的版本。

基於國家代碼。 周日返回 0,周一返回 1,周六返回 -1,周五返回 -2,因此您可以使用它來制作日歷。 未知國家代碼返回 1。

{
let wso = { // fri:1, sat:2, sun:3
    MV:1,
    AE:2,AF:2,BH:2,DJ:2,DZ:2,EG:2,IQ:2,IR:2,JO:2,KW:2,LY:2,OM:2,QA:2,SD:2,SY:2,
    AG:3,AS:3,AU:3,BD:3,BR:3,BS:3,BT:3,BW:3,BZ:3,CA:3,CN:3,CO:3,DM:3,DO:3,ET:3,
    GT:3,GU:3,HK:3,HN:3,ID:3,IL:3,IN:3,JM:3,JP:3,KE:3,KH:3,KR:3,LA:3,MH:3,MM:3,
    MO:3,MT:3,MX:3,MZ:3,NI:3,NP:3,PA:3,PE:3,PH:3,PK:3,PR:3,PT:3,PY:3,SA:3,SG:3,
    SV:3,TH:3,TT:3,TW:3,UM:3,US:3,VE:3,VI:3,WS:3,YE:3,ZA:3,ZW:3,
}
function week_start_offset(country) {
    return (wso[country] || 4) - 3
}
}

console.log(week_start_offset('US'))
console.log(week_start_offset('RO'))

你可以使用moment.js

moment.localeData('en-us').firstDayOfWeek();

至於純 js,您必須制作自己的查找表。 您可以使用 momentjs 源代碼作為參考。 https://github.com/moment/moment/tree/develop/locale

在每個語言環境文件中查找配置末尾的dow

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM