這應該回傳一年的最后一周:
moment().year('2021').week(51).day('monday').format('YYYY-MM-DD');
但它正在回傳2022-12-12。我認為moment.js.
這是代碼筆:https ://jsfiddle.net/5402bkmp/
uj5u.com熱心網友回復:
你應該在這里發布你的代碼,而不是其他地方。
var now = moment().year('2021').week(51).day('monday').format('YYYY-MM-DD');
console.log(now.toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js"></script>
分解代碼,如果在 12 月 27 日星期一運行:
moment()
為 2021 年 12 月 27 日創建一個矩物件
.year('2021')
將年份設定為 2021 年,這沒有任何改變,因為它已經設定為 2021 年。它還處理諸如 2020-02-29 1 年之類的情況,它變成了 2021-02-28。
.week(51)
設定為第 51 周的“本地化”開始。問題是,用戶如何知道 moment.js 如何本地化事物?對我來說,這似乎是 2021 年 12 月 12 日星期日。該編號似乎基于從 2021 年 1 月 1 日或之前的第一個星期日(即 2020 年new Date(2020, 11, 27 50*7)12 月27 日星期日)開始的第一周,例如給出 2021 年 12 月 12 日。
.day('monday')
將日期設定為同一本地化周的星期一,同樣,用戶很難知道他們的“本地化”周是什么。對我來說,它只是將其保留為星期一,因為本地化周似乎從星期日開始(我的 PC 設定為從星期一開始)。
.format('YYYY-MM-DD')
所以我認為很明顯,使用week方法的一個問題是程式員和用戶都不知道結果會是什么,因為他們不知道 moment.js 使用什么來本地化事物(可能是navigator.language)。結果可能與預期的非常不同。
正如 Sergiu 建議的那樣,一種解決方法是使用isoWeek,因此至少結果是一致且可預測的。ISO 周從星期一開始,第一周是學科年中天數最多的一周。它也表示為第一個星期四的那一周,或 1 月 4 日的那一周,它們都致力于將同一星期一作為任何特定年份的第 1 周的開始。有些年份有 52 周,有些年份有 53 周,通常臨近年底的幾天是下一年的第一周或上一年的最后一周的一部分。
您可能還希望像在 PHP 中一樣在 JavaScript 中查看Get week of year。
uj5u.com熱心網友回復:
您需要使用.isoWeek而不是.week(在此處記錄,盡管我不清楚為什么)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/394484.html
標籤:javascript 节点.js 约会时间 瞬间
上一篇:基于時間的gcloud過濾結果
下一篇:非UTC或本地時區中的日期時間
