簡體   English   中英

將周數和年份轉換為 Javascript 中的日期對象

[英]convert a week number and year to a date object in Javascript

我對 Web 開發非常陌生,我目前正在處理儀表板,我的數據來自 MySql 數據庫。 我想在前端使用 javascript 將周數和年份轉換為實際的日期對象。 這是我的第一次嘗試,我在研究時偶然發現了我相信這個函數假設當年一周的第一天是星期一(1):

function getDateOfWeek(w, y) {
   var d = 1 + (w - 1) * 7;
 
   return new Date(y, 0, d);
 }

但是一周的第一天總是星期一的想法是可取的,否則怎么辦? 因此,經過更多研究,我將代碼修改為如下所示:

let currentDate = new Date()
let currentYear = currentDate.getFullYear()
let firstOfJan = new Date(currentYear, 0, 1).getDay();

function getDateOfWeek(w, y) {
   var d = firstOfJan + (w - firstOfJan) * 7;
 
   return new Date(y, 0, d);
 }

請我不確定這是否能 100% 解決問題。 上面的功能有缺點嗎? 還是覆蓋它? 或者我錯過了什么? 感謝您的時間

計算周數有多種方案。 ISO 8601 使用一年中第一個星期四之前的星期一作為第一周的開始。 所以一年的最后幾天可能在次年的第一周,前幾天可能在上一年的最后一周。 一年可能有 52 或 53 周。 還有其他方案。 你想用哪一個?

下面將 ISO 周轉換為日期。 它不會驗證輸入,因此您需要添加它。

 // Convert week in format yyyyWww (eg 2022W05) to Date function isoWeekToDate(isoWeek) { let [y, w] = isoWeek.split(/w/i); // Get date for 4th of January for year let d = new Date(y, 0, 4); // Get previous Monday, add 7 days for each week after first d.setDate(d.getDate() - (d.getDay() || 7) + 1 + (w - 1) * 7); return d; } // Tests ['2010W01', '2011W01', '2012W01', '2013W01', '2014W01', '2015W01', '2016W01', '2017W01', '2018W01', '2019W01', '2020W01'].forEach(s => console.log(isoWeekToDate(s).toDateString()) );

暫無
暫無

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

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