我一直在使用堆棧溢出了幾個月,但這是我的第一篇文章。JavaScript:將日/週轉換爲年
我需要一個函數來將星期數和星期幾轉換爲dd/mm/yyyy格式。
我必須使用的日期值格式爲day/weekNumber
。因此,例如:3/43
將轉換爲20XX年10月24日星期三。年度價值將是當年。
日期值從1(星期一)開始。
我在網上找到了很多功能(如this,this和this)。有些人使用ISO 8601日期,我認爲這不適合我。而我還沒有找到一個適合我的人。
由於提前,
我一直在使用堆棧溢出了幾個月,但這是我的第一篇文章。JavaScript:將日/週轉換爲年
我需要一個函數來將星期數和星期幾轉換爲dd/mm/yyyy格式。
我必須使用的日期值格式爲day/weekNumber
。因此,例如:3/43
將轉換爲20XX年10月24日星期三。年度價值將是當年。
日期值從1(星期一)開始。
我在網上找到了很多功能(如this,this和this)。有些人使用ISO 8601日期,我認爲這不適合我。而我還沒有找到一個適合我的人。
由於提前,
此解決方案確實需要添加額外的庫,但我認爲它確實值得。它是一個momentjs庫,用於處理日期和時間。它積極維護,並有一個偉大的documentation。一旦你的一天,weekNumber(在我們的例子3和43)的值,你應該做到如下:
function formatInput(day, weekNumber){
var currentDate = moment(new Date()); // initialize moment to a current date
currentDate.startOf('year'); // set to Jan 1 12:00:00.000 pm this year
currentDate.add('w',weekNumber - 1); // add number of weeks to the beginning of the year (-1 because we are now at the 1st week)
currentDate.day(day); // set the day to the specified day, Monday being 1, Sunday 7
alert(currentDate.format("dddd, MMMM Do YYYY")); // return the formatted date string
return currentDate.format("dddd, MMMM Do YYYY");
}
我覺得這個庫可能對你有用以後,有很多關於日期的可能性和時間操作,以及格式化選項。還有一個偉大的文件寫爲momentjs。
因此,假如你有3
和43
值分別,你可以做在本年度的第一天一些簡單的數學:
事情是這樣的,也許:
var currentDate = new Date();
var startOfYear = new Date(currentDate.getFullYear(), 0, 1);//note: months start at 0
var daysToAdd = (43 * 7) + 3;
//add days
startOfYear.setDate(startOfYear.getDate() + daysToAdd);
編輯
關於第二個想法,我想我是錯了你的要求。看起來你需要一週中的某一天。 Check this out以獲得更好的解決方案。
問題是,這一切都取決於你一個星期的定義。今年是星期天開始,那麼這意味着02/01/2012(今年的第一個星期一)是第二週的開始?與週日期打交道時
我最近的一個例子將首先找到指定的一週的開始,然後找到指定的天
的下一次出現。根據ISO的周從星期一開始,並在第一週今年是包含今年第一個星期四的那一年。因此,2012年第一週從1月2日星期一開始,2013年第一週將於2012年12月31日星期一開始。
所以如果3/43是第43周的第三天(這是ISO日期2012-W43-3),那麼它可以被它轉化成使用日期對象:
function customWeekDateToDate(s) {
var d, n;
var bits = s.split('/');
// Calculate Monday of first week of year this year
d = new Date();
d = new Date(d.getFullYear(),0,1); // 1 jan this year
n = d.getDay();
d.setDate(d.getDate() + (-1 * n +(n<5? 1 : 8)));
// Add days
d.setDate(d.getDate() + --bits[0] + --bits[1] * 7);
return d;
}
console.log(customWeekDateToDate('3/43')); // 01 2012-10-24
注意,這裏使用的日期,否則夏令換可能會導致錯誤的日期。
使用「12:00:00.000」是混淆和模棱兩可的,因爲對於12點意味着午夜還是午間(嚴格意義上都不是)沒有共識。今年年初爲2012-01-01 00:00:00,但這不是使用ISO週日期的第一週的第一天,發生在2012年1月2日星期一。 – RobG