204 votes

Obtenez la semaine de l'année en JavaScript comme en PHP

Comment puis-je obtenir le numéro de semaine en cours de l'année, comme%% date('W') PHP?

Il devrait s'agir du nombre de semaines ISO-8601 , les semaines commençant le lundi.

380voto

RobG Points 41170

Vous devriez être en mesure d'obtenir ce que vous voulez ici:http://www.merlyn.demon.co.uk/js-date6.htm#YWD

Un meilleur lien sur le même site est: Travailler avec des semaines http://www.merlyn.demon.co.uk/js-date7.htm

Modifier

Voici un code basé sur les liens fournis et qui a posté plus tôt par Dommer. Il a été légèrement testé contre les résultats à http://www.merlyn.demon.co.uk/js-date6.htm#YWD. S'il vous plaît tester à fond, pas de garantie.

/* For a given date, get the ISO week number
 *
 * Based on information at:
 *
 *    http://www.merlyn.demon.co.uk/weekcalc.htm#WNR
 *
 * Algorithm is to find nearest thursday, it's year
 * is the year of the week number. Then get weeks
 * between that date and the first day of that year.
 *
 * Note that dates in one year can be weeks of previous
 * or next year, overlap is up to 3 days.
 *
 * e.g. 2014/12/29 is Monday in week  1 of 2015
 *      2012/1/1   is Sunday in week 52 of 2011
 */
function getWeekNumber(d) {
    // Copy date so don't modify original
    d = new Date(+d);
    d.setHours(0,0,0);
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setDate(d.getDate() + 4 - (d.getDay()||7));
    // Get first day of year
    var yearStart = new Date(d.getFullYear(),0,1);
    // Calculate full weeks to nearest Thursday
    var weekNo = Math.ceil(( ( (d - yearStart) / 86400000) + 1)/7)
    // Return array of year and week number
    return [d.getFullYear(), weekNo];
}

Notez que les heures doivent être remis à zéro dans le cas d'un objet date est passé avec une heure de retard.

Réduite, version prototype (renvoie uniquement à la semaine):

Date.prototype.getWeekNumber = function(){
    var d = new Date(+this);
    d.setHours(0,0,0);
    d.setDate(d.getDate()+4-(d.getDay()||7));
    return Math.ceil((((d-new Date(d.getFullYear(),0,1))/8.64e7)+1)/7);
};

26voto

orafaelreis Points 835

En accord avec http://javascript.about.com/library/blweekyear.htm

 Date.prototype.getWeek = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((((this - onejan) / 86400000) + onejan.getDay()+1)/7);
}
 

13voto

Brad Koch Points 4046

La bibliothèque Date.format() Jacob Wright implémente le formatage de la date dans le style de la fonction date() de PHP et prend en charge le numéro de semaine ISO-8601:

 new Date().format('W');
 

C'est peut-être un peu excessif pour un numéro de semaine seulement, mais il prend en charge le formatage de style PHP et est très pratique si vous en faites beaucoup.

5voto

Balu Ertl Points 19

J'ai trouvé utile la classe SimpleDateFormat de Java SE décrite dans les spécifications d'Oracle: http://goo.gl/7MbCh5 . Dans mon cas, dans Google Apps Script, cela fonctionnait comme suit:

 function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), "GMT", "w"));
  Logger.log(weekNum);
}
 

Par exemple, dans une macro de feuille de calcul, vous pouvez récupérer le fuseau horaire réel du fichier:

 function getWeekNumber() {
  var weekNum = parseInt(Utilities.formatDate(new Date(), SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "w"));
  Logger.log(weekNum);
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X