J'avais essayé de trouver du travail fait mais je n'ai pas eu de chance. Des idées? P>
Exemples: P>
semaine, 1, 2001 => 2001-01-01 P>
semaine, 26, 2007 => 2007-06-01 P>
4 Réponses :
Jetez un look sur ce violon . Premièrement, cela obtient la première semaine de l'année spécifiée. Cela prend en compte que, selon ISO 8601 La première semaine de l'année est la première semaine contenant un Mercredi. Ensuite, il ajoute les semaines à la date acquise et renvoie le résultat.
function firstDayOfWeek(week, year) { var date = firstWeekOfYear(year), weekTime = weeksToMilliseconds(week), targetTime = weekTime + date.getTime(); return date.setTime(targetTime); }
DOT fonctionne-t-il? Par exemple, Nouvelle date (FirstDayOfweek (1 2013)) Code> donne
Tue 1 janv. 2013 Code> tandis que le premier jour de la première semaine de 2013 est
Lun Dec 31 décembre , 2012 code>. Voir epochconverter.com/date-and-time/weeknumbers-by -Year.php
Droite, j'ai supposé à tort que c'est ce que le Raimonbosch voulait, car le premier exemple implique cela. Je n'ai pas vérifié que c'est vraiment un lundi. :) Comme vous avez déjà fourni une meilleure réponse vous-même, je vous entamerai la vôtre.
J'ai pris l'idée originale de Kevin , avec quelques modifications, coz Le code d'origine renvoie des millisecondes. Ici vous allez:
var d = firstDayOfWeek(9, 2013); console.log(d.format("yyyy-MM-dd")); ////////////////////////////// Main Code ////////////////////////////// function firstDayOfWeek(week, year) { if (typeof year !== 'undefined') { year = (new Date()).getFullYear(); } var date = firstWeekOfYear(year), weekTime = weeksToMilliseconds(week), targetTime = date.getTime() + weekTime - 86400000; var result = new Date(targetTime) return result; } function weeksToMilliseconds(weeks) { return 1000 * 60 * 60 * 24 * 7 * (weeks - 1); } function firstWeekOfYear(year) { var date = new Date(); date = firstDayOfYear(date,year); date = firstWeekday(date); return date; } function firstDayOfYear(date, year) { date.setYear(year); date.setDate(1); date.setMonth(0); date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0); return date; } function firstWeekday(date) { var day = date.getDay(), day = (day === 0) ? 7 : day; if (day > 3) { var remaining = 8 - day, target = remaining + 1; date.setDate(target); } return date; }
Aussi loin que j'ai compris, vous vouliez obtenir la date comme une date code> et non comme une valeur longue en millisecondes. Mais pourquoi avez-vous été soustrait 86400000 au Targettime?
Comme le code de Kevin n'entraîne pas correctement ISO 8601 (le premier jour de la première semaine de la semaine doit être un lundi), je l'ai corrigé et fini par (aussi function firstDayOfWeek(week, year) {
if (year==null) {
year = (new Date()).getFullYear();
}
var date = firstWeekOfYear(year),
weekTime = weeksToMilliseconds(week),
targetTime = date.getTime() + weekTime;
return date.setTime(targetTime);
}
function weeksToMilliseconds(weeks) {
return 1000 * 60 * 60 * 24 * 7 * (weeks - 1);
}
function firstWeekOfYear(year) {
var date = new Date();
date = firstDayOfYear(date,year);
date = firstWeekday(date);
return date;
}
function firstDayOfYear(date, year) {
date.setYear(year);
date.setDate(1);
date.setMonth(0);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
return date;
}
/**
* Sets the given date as the first day of week of the first week of year.
*/
function firstWeekday(firstOfJanuaryDate) {
// 0 correspond au dimanche et 6 correspond au samedi.
var FIRST_DAY_OF_WEEK = 1; // Monday, according to iso8601
var WEEK_LENGTH = 7; // 7 days per week
var day = firstOfJanuaryDate.getDay();
day = (day === 0) ? 7 : day; // make the days monday-sunday equals to 1-7 instead of 0-6
var dayOffset=-day+FIRST_DAY_OF_WEEK; // dayOffset will correct the date in order to get a Monday
if (WEEK_LENGTH-day+1<4) {
// the current week has not the minimum 4 days required by iso 8601 => add one week
dayOffset += WEEK_LENGTH;
}
return new Date(firstOfJanuaryDate.getTime()+dayOffset*24*60*60*1000);
}
function assertDateEquals(effectiveDate, expectedDate, description) {
if ((effectiveDate==null ^ expectedDate==null) || effectiveDate.getTime()!=expectedDate.getTime()) {
console.log("assert failed: "+description+"; effective="+effectiveDate+", expected="+expectedDate);
}
}
function assertEquals(effectiveValue, expectedValue, description) {
if (effectiveValue!=expectedValue) {
console.log("assert failed: "+description+"; effective="+effectiveValue+", expected="+expectedValue);
}
}
// expect the first day of year to be a monday
for (var i=1970; i<2050; i++) {
assertEquals(firstWeekOfYear(i).getDay(), 1, "first day of year "+i+" must be a monday"); // 1=Monday
}
// assert some future first day of first week of year; source: http://www.epochconverter.com/date-and-time/weeknumbers-by-year.php
assertDateEquals(firstWeekOfYear(2013), new Date(Date.parse("Dec 31, 2012")), "2013");
assertDateEquals(firstWeekOfYear(2014), new Date(Date.parse("Dec 30, 2013")), "2014");
assertDateEquals(firstWeekOfYear(2015), new Date(Date.parse("Dec 29, 2014")), "2015");
assertDateEquals(firstWeekOfYear(2016), new Date(Date.parse("Jan 4, 2016")), "2016");
assertDateEquals(firstWeekOfYear(2017), new Date(Date.parse("Jan 2, 2017")), "2017");
assertDateEquals(firstWeekOfYear(2018), new Date(Date.parse("Jan 1, 2018")), "2018");
assertDateEquals(firstWeekOfYear(2019), new Date(Date.parse("Dec 31, 2018")), "2019");
assertDateEquals(firstWeekOfYear(2020), new Date(Date.parse("Dec 30, 2019")), "2020");
assertDateEquals(firstWeekOfYear(2021), new Date(Date.parse("Jan 4, 2021")), "2021");
assertDateEquals(firstWeekOfYear(2022), new Date(Date.parse("Jan 3, 2022")), "2022");
assertDateEquals(firstWeekOfYear(2023), new Date(Date.parse("Jan 2, 2023")), "2023");
assertDateEquals(firstWeekOfYear(2024), new Date(Date.parse("Jan 1, 2024")), "2024");
assertDateEquals(firstWeekOfYear(2025), new Date(Date.parse("Dec 30, 2024")), "2025");
assertDateEquals(firstWeekOfYear(2026), new Date(Date.parse("Dec 29, 2025")), "2026");
console.log("All assertions done.");
Quelqu'un peut toujours être intéressé par une version plus contenue:
Ne fonctionne pas. FirstDayOfweek (2015, 37) Code> =>
2015-09-06 code> doit être
2015-09-07 code>.
Est-ce que cela répond à votre question? JavaScript Calculer la date du numéro de semaine