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

140

Comment obtenir le numéro de semaine actuel de l'année, comme celui de PHP date('W')?

Ce devrait être le numéro de semaine ISO-8601 de l'année, les semaines commençant le lundi.

PeeHaa
la source
1
Regardez <a href=" javascript.about.com/library/blweekyear.htm "> <b> ici </b> </a>, qui était le premier lien donné lorsque j'ai googlé 'javascript semaine de l'année'.
Pete Wilson
+1 lol! C'est là que j'ai obtenu l'extrait de moi-même, mais je ne me souvenais pas de la source car je l'ai eu il y a quelque temps.
Tom Chantler
@Pete: Ce code obtient 22 comme semaine en cours. Alors qu'il devrait être 21
PeeHaa
@Pete:: D Nopez un simple -1 ne fera pas l'affaire: P Cela n'obtiendra pas le numéro de semaine ISO-8601. Une semaine dans ISO-8601 commence lundi. La première semaine est la semaine avec le premier jeudi de l'année. en.wikipedia.org/wiki/ISO-8601 . PS, ce n'est pas moi qui t'ai critiqué.
PeeHaa

Réponses:

277

Vous devriez pouvoir 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 .

Éditer

Voici un code basé sur les liens fournis et celui publié par Dommer. Il a été légèrement testé par rapport aux résultats sur http://www.merlyn.demon.co.uk/js-date6.htm#YWD . Veuillez tester soigneusement, aucune garantie fournie.

Modifier 2017

Il y avait un problème avec les dates pendant la période pendant laquelle l'heure d'été a été observée et les années où le 1er janvier était le vendredi. Corrigé en utilisant toutes les méthodes UTC. Ce qui suit renvoie des résultats identiques à Moment.js.

/* 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(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));
    // Set to nearest Thursday: current date + 4 - current day number
    // Make Sunday's day number 7
    d.setUTCDate(d.getUTCDate() + 4 - (d.getUTCDay()||7));
    // Get first day of year
    var yearStart = new Date(Date.UTC(d.getUTCFullYear(),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.getUTCFullYear(), weekNo];
}

var result = getWeekNumber(new Date());
document.write('It\'s currently week ' + result[1] + ' of ' + result[0]);

Les heures sont remises à zéro lors de la création de la date "UTC".

Version prototype réduite (renvoie uniquement le numéro de la semaine):

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

document.write('The current ISO week number is ' + new Date().getWeekNumber());

Section de test

Dans cette section, vous pouvez saisir n'importe quelle date au format AAAA-MM-JJ et vérifier que ce code donne le même numéro de semaine que le numéro de semaine ISO Moment.js (testé sur 50 ans de 2000 à 2050).

Date.prototype.getWeekNumber = function(){
  var d = new Date(Date.UTC(this.getFullYear(), this.getMonth(), this.getDate()));
  var dayNum = d.getUTCDay() || 7;
  d.setUTCDate(d.getUTCDate() + 4 - dayNum);
  var yearStart = new Date(Date.UTC(d.getUTCFullYear(),0,1));
  return Math.ceil((((d - yearStart) / 86400000) + 1)/7)
};

function checkWeek() {
  var s = document.getElementById('dString').value;
  var m = moment(s, 'YYYY-MM-DD');
  document.getElementById('momentWeek').value = m.format('W');
  document.getElementById('answerWeek').value = m.toDate().getWeekNumber();      
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Enter date  YYYY-MM-DD: <input id="dString" value="2021-02-22">
<button onclick="checkWeek(this)">Check week number</button><br>
Moment: <input id="momentWeek" readonly><br>
Answer: <input id="answerWeek" readonly>

RobG
la source
8
Ce code calcule le 2 janvier 2011 comme la 53e semaine de 2010 où il devrait être la 52e. Cela fonctionne correctement dans le code d'origine mais pas dans votre adaptation.
Alasdair
4
Vous avez sauvé mon cul. Merci. Si vous souhaitez contribuer à l'Open Source, je vous suggère de créer un patch pour la méthode jQuery UI: $ .datepicker.iso8601Week (date) car il ne renvoie que weekNo, mais pas d'année.
Christian
18
Aujourd'hui, le 4 janvier 2016, j'ai remarqué qu'il était également nécessaire d'ajouter d.setMilliseconds(0)des numéros de semaine différents pour la même date selon que j'utilisais la nouvelle date () ou la nouvelle date ("1/4/2016"). Juste un avertissement pour les autres qui pourraient vivre la même chose.
Jacob Lauritzen le
2
À condition que le code ne suive pas ISO 8601, il est désactivé par un
Eric Grange
2
Oups, vous avez raison, ma faute de frappe était censée être «2015-12-30», ce qui fonctionne.
Ally
39

Vous pouvez également utiliser la bibliothèque momentjs:

moment().format('W')

six jours
la source
9
oumoment().week()
Alex78191
26

Comme dit ci-dessus mais sans classe:

let now = new Date();
let onejan = new Date(now.getFullYear(), 0, 1);
week = Math.ceil( (((now - onejan) / 86400000) + onejan.getDay() + 1) / 7 );
nvd
la source
4
un-jan-tang! * ninja-roll *
CodeManX
2
C'est la seule réponse qui récupère le numéro de semaine correct, même pour la première semaine de l'année.
PrasadW
Remarque à faire (now.getTime() - onejan.getTime())pour éviter les problèmes de build.
Swoox
4
La question posée pour l'ISO 8601 que cela ignore. En réponse à la question, il est tout simplement faux
havlock
23

Accordily http://javascript.about.com/library/blweekyear.htm

Date.prototype.getWeek = function() {
    var onejan = new Date(this.getFullYear(),0,1);
    var millisecsInDay = 86400000;
    return Math.ceil((((this - onejan) /millisecsInDay) + onejan.getDay()+1)/7);
};
orafaelreis
la source
1
Concis, mais traite le dimanche comme le premier jour de la semaine, donc le dimanche 27 décembre 2015 est le premier jour de la semaine 53 plutôt que le dernier jour de la semaine 52. Cela peut cependant convenir à certains.
RobG
3
Je pense que puisque cela est ajouté au prototype, c'est ce à quoi vous vous attendez car Date traite le dimanche comme le premier jour.
Ed Sykes
N'y aura-t-il pas de problèmes les jours d'heure d'été? Je pense qu'il n'avancera pas avant 1h du matin pendant l'été.
Hafthor
De plus, techniquement, cela ne fait-il pas avancer la semaine jusqu'à 0: 00: 00.001? Mieux vaut utiliser Math.floor?
Hafthor
11

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

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

Cela peut être un peu exagéré pour une semaine seulement, mais il prend en charge le formatage de style PHP et est assez pratique si vous faites beaucoup de cela.

Brad Koch
la source
Bonne solution pour les scripts rapidement piratés :)
Steen Schütt
6
getWeekOfYear: function(date) {
        var target = new Date(date.valueOf()),
            dayNumber = (date.getUTCDay() + 6) % 7,
            firstThursday;

        target.setUTCDate(target.getUTCDate() - dayNumber + 3);
        firstThursday = target.valueOf();
        target.setUTCMonth(0, 1);

        if (target.getUTCDay() !== 4) {
            target.setUTCMonth(0, 1 + ((4 - target.getUTCDay()) + 7) % 7);
        }

        return Math.ceil((firstThursday - target) /  (7 * 24 * 3600 * 1000)) + 1;
    }

Le code suivant est indépendant du fuseau horaire (dates UTC utilisées) et fonctionne selon https://en.wikipedia.org/wiki/ISO_8601

Dmitry Volokh
la source
4

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

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);
}
Balu Ertl
la source
4

Cela ajoute la méthode "getWeek" à Date.prototype qui renvoie le nombre de semaines depuis le début de l'année. L'argument définit quel jour de la semaine considérer le premier. Si aucun argument n'est passé, le premier jour est supposé dimanche.

/**
 * Get week number in the year.
 * @param  {Integer} [weekStart=0]  First day of the week. 0-based. 0 for Sunday, 6 for Saturday.
 * @return {Integer}                0-based number of week.
 */
Date.prototype.getWeek = function(weekStart) {
    var januaryFirst = new Date(this.getFullYear(), 0, 1);
    if(weekStart !== undefined && (typeof weekStart !== 'number' || weekStart % 1 !== 0 || weekStart < 0 || weekStart > 6)) {
      throw new Error('Wrong argument. Must be an integer between 0 and 6.');
    }
    weekStart = weekStart || 0;
    return Math.floor((((this - januaryFirst) / 86400000) + januaryFirst.getDay() - weekStart) / 7);
};
Tigran
la source
1
La première semaine calendaire de 2016 commence le 4 janvier en Allemagne , mais votre fonction recommence à compter à partir de 0 à partir du 1er janvier. Il renvoie également des numéros erronés à la fin de l'année, par exemple 52 pour 2018-11-31 (53ème semaine), bien que ce soit déjà la 1ère semaine calendaire de 2019 : new Date(Date.UTC(2018,11, 31)).getWeek(1)+1(le lundi est le 1er jour de la semaine en Allemagne).
CodeManX
C'est ainsi que cela a été prévu, et c'est, je crois, le cas d'utilisation le plus probable. Sinon, les 3 premiers jours de 2016 tomberaient. Les premiers jours du mois sont considérés comme la première semaine du mois, quels que soient les jours et le nombre de jours. Si vous avez besoin que la fonction fonctionne différemment, vous pouvez la modifier en fonction de vos besoins. De même, si une semaine tombe à la fois dans l'année donnée et dans l'année suivante, elle peut être appelée la dernière semaine de cette année, ainsi que la première semaine de l'année suivante (selon la logique actuelle).
Tigran
Merci pour l'info. J'ai fini par utiliser la solution de RobG, qui implémente correctement les dates de semaine ISO8601 (les derniers jours de décembre et les premiers jours de janvier peuvent appartenir à la semaine 52, 53 ou 1: en.m.wikipedia.org/wiki/ISO_week_date
CodeManX
4

Obtenez le numéro de semaine d'une date donnée

function week(year,month,day) {
    function serial(days) { return 86400000*days; }
    function dateserial(year,month,day) { return (new Date(year,month-1,day).valueOf()); }
    function weekday(date) { return (new Date(date)).getDay()+1; }
    function yearserial(date) { return (new Date(date)).getFullYear(); }
    var date = year instanceof Date ? year.valueOf() : typeof year === "string" ? new Date(year).valueOf() : dateserial(year,month,day), 
        date2 = dateserial(yearserial(date - serial(weekday(date-serial(1))) + serial(4)),1,3);
    return ~~((date - date2 + serial(weekday(date2) + 5))/ serial(7));
}

Exemple

console.log(
    week(2016, 06, 11),//23
    week(2015, 9, 26),//39
    week(2016, 1, 1),//53
    week(2016, 1, 4),//1
    week(new Date(2016, 0, 4)),//1
    week("11 january 2016")//2
);
Hans Petersen
la source
1
Je n'arrive pas à y croire, mais cette fonction est la seule qui fonctionne tout le temps! La réponse acceptée a joué au-delà de l'heure d'été, d'autres ont dit «0» comme numéro de semaine certaines années. - et certains se sont appuyés sur des fonctions UTC qui renvoyaient parfois la veille, lui attribuant ainsi la semaine '53' ou '54'. Malheureusement j'ai besoin que la semaine commence un dimanche et ce code est très difficile à comprendre ...
Melissa Zachariadis
@MelissaZachariadis a dit I need the week to begin on a Sunday; Je pense que le seul changement nécessaire est dans la fonction jour de la semaine () .getDay()+1à changer en.getDay()
Rafa
4

Le code ci-dessous calcule le numéro de semaine ISO 8601 correct. Il correspond à PHP date("W")pour chaque semaine entre le 1/1/1970 et 1/1/2100.

/**
 * Get the ISO week date week number
 */
Date.prototype.getWeek = function () {
  // Create a copy of this date object
  var target = new Date(this.valueOf());

  // ISO week date weeks start on Monday, so correct the day number
  var dayNr = (this.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  target.setDate(target.getDate() - dayNr + 3);

  // Store the millisecond value of the target date
  var firstThursday = target.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  target.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (target.getDay() !== 4) {
    target.setMonth(0, 1 + ((4 - target.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((firstThursday - target) / 604800000);
}

Source: Taco van den Broek


Si vous n'aimez pas étendre les prototypes, voici une fonction:

function getWeek(date) {
  if (!(date instanceof Date)) date = new Date();

  // ISO week date weeks start on Monday, so correct the day number
  var nDay = (date.getDay() + 6) % 7;

  // ISO 8601 states that week 1 is the week with the first Thursday of that year
  // Set the target date to the Thursday in the target week
  date.setDate(date.getDate() - nDay + 3);

  // Store the millisecond value of the target date
  var n1stThursday = date.valueOf();

  // Set the target to the first Thursday of the year
  // First, set the target to January 1st
  date.setMonth(0, 1);

  // Not a Thursday? Correct the date to the next Thursday
  if (date.getDay() !== 4) {
    date.setMonth(0, 1 + ((4 - date.getDay()) + 7) % 7);
  }

  // The week number is the number of weeks between the first Thursday of the year
  // and the Thursday in the target week (604800000 = 7 * 24 * 3600 * 1000)
  return 1 + Math.ceil((n1stThursday - date) / 604800000);
}

Exemple d'utilisation:

getWeek(); // Returns 37 (or whatever the current week is)
getWeek(new Date('Jan 2, 2011')); // Returns 52
getWeek(new Date('Jan 1, 2016')); // Returns 53
getWeek(new Date('Jan 4, 2016')); // Returns 1
thdoan
la source
J'aime cette fonction, mais j'ai une question; Que dois-je faire si je veux le remettre au dimanche? Je n'ai aucune idée de ce que fait la +6 ) % 7pièce. Merci d'un gommage!
NoobishPro
1
La semaine ISO @Babydead commence un lundi, mais JavaScript getDay()commence un dimanche, donc si vous voulez qu'elle commence le dimanche, vous pouvez supprimer la correction:var nDay = date.getDay();
thdoan
J'ai essayé plus de 8 implémentations JS différentes pour obtenir le numéro de semaine. C'est la seule fonction qui fonctionne, mais seulement si je change tous les getters et setters en getUTC .. et setUTC .. Je ne sais pas pourquoi. Je testais avec ceci: 2017-07-17T00: 00: 00.000Z (semaine 29) 2017-07-23T23: 59: 59.000Z (semaine 29) 2021-01-04T00: 00: 00.000Z (semaine 1)
psycho brm
2

Si vous êtes déjà dans un projet Angular, vous pouvez utiliser $filter('date').

Par exemple:

var myDate = new Date();
var myWeek = $filter('date')(myDate, 'ww');
Gabriel Furstenheim
la source
2

L'extrait de code qui fonctionne plutôt bien pour moi est celui-ci:

var yearStart = +new Date(d.getFullYear(), 0, 1);
var today = +new Date(d.getFullYear(),d.getMonth(),d.getDate());
var dayOfYear = ((today - yearStart + 1) / 86400000);
return Math.ceil(dayOfYear / 7).toString();

Remarque:
dest ma date pour laquelle je veux le numéro de la semaine en cours.
Le +convertit les dates en nombres (en utilisant TypeScript).

Vasco
la source
1

Voici mon implémentation pour calculer le numéro de semaine en JavaScript. corrigé pour les décalages d'heure d'été et d'hiver également. J'ai utilisé la définition de la semaine de cet article: ISO 8601

Les semaines vont du lundi au dimanche et le 4 janvier est toujours la première semaine de l'année.

// add get week prototype functions
// weeks always start from monday to sunday
// january 4th is always in the first week of the year
Date.prototype.getWeek = function () {
    year = this.getFullYear();
    var currentDotw = this.getWeekDay();
    if (this.getMonth() == 11 && this.getDate() - currentDotw > 28) {
        // if true, the week is part of next year 
        return this.getWeekForYear(year + 1);
    }
    if (this.getMonth() == 0 && this.getDate() + 6 - currentDotw < 4) {
        // if true, the week is part of previous year
        return this.getWeekForYear(year - 1);
    }
    return this.getWeekForYear(year);
}

// returns a zero based day, where monday = 0
// all weeks start with monday
Date.prototype.getWeekDay = function () {
    return  (this.getDay() + 6) % 7;
}

// corrected for summer/winter time
Date.prototype.getWeekForYear = function (year) {
    var currentDotw = this.getWeekDay();
    var fourjan = new Date(year, 0, 4);
    var firstDotw = fourjan.getWeekDay();
    var dayTotal = this.getDaysDifferenceCorrected(fourjan) // the difference in days between the two dates.
    // correct for the days of the week
    dayTotal += firstDotw; // the difference between the current date and the first monday of the first week, 
    dayTotal -= currentDotw; // the difference between the first monday and the current week's monday
    // day total should be a multiple of 7 now
    var weeknumber = dayTotal / 7 + 1; // add one since it gives a zero based week number.
    return weeknumber;
}

// corrected for timezones and offset
Date.prototype.getDaysDifferenceCorrected = function (other) {
    var millisecondsDifference = (this - other);
    // correct for offset difference. offsets are in minutes, the difference is in milliseconds
    millisecondsDifference += (other.getTimezoneOffset()- this.getTimezoneOffset()) * 60000;
    // return day total. 1 day is 86400000 milliseconds, floor the value to return only full days
    return Math.floor(millisecondsDifference / 86400000);
}

pour tester j'ai utilisé les tests JavaScript suivants dans Qunit

var runweekcompare = function(result, expected) {
    equal(result, expected,'Week nr expected value: ' + expected + ' Actual value: ' + result);
}

test('first week number test', function () {
    expect(5);
    var temp = new Date(2016, 0, 4); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 4, 23, 50); // is the monday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 10, 23, 50); // is the sunday of the first week of the year
    runweekcompare(temp.getWeek(), 1);
    var temp = new Date(2016, 0, 11, 23, 50); // is the second week of the year
    runweekcompare(temp.getWeek(), 2);
    var temp = new Date(2016, 1, 29, 23, 50); // is the 9th week of the year
    runweekcompare(temp.getWeek(), 9);
});

test('first day is part of last years last week', function () {
    expect(2);
    var temp = new Date(2016, 0, 1, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 53);
    var temp = new Date(2011, 0, 2, 23, 50); // is the first last week of the previous year
    runweekcompare(temp.getWeek(), 52);
});

test('last  day is part of next years first week', function () {
    var temp = new Date(2013, 11, 30); // is part of the first week of 2014
    runweekcompare(temp.getWeek(), 1);
});

test('summer winter time change', function () {
    expect(2);
    var temp = new Date(2000, 2, 26); 
    runweekcompare(temp.getWeek(), 12);
    var temp = new Date(2000, 2, 27); 
    runweekcompare(temp.getWeek(), 13);
});

test('full 20 year test', function () {
    //expect(20 * 12 * 28 * 2);
    for (i = 2000; i < 2020; i++) {
        for (month = 0; month < 12; month++) {
            for (day = 1; day < 29 ; day++) {
                var temp = new Date(i, month, day);
                var expectedweek = temp.getWeek();
                var temp2 = new Date(i, month, day, 23, 50);
                var resultweek = temp.getWeek();
                equal(expectedweek, Math.round(expectedweek), 'week number whole number expected ' + Math.round(expectedweek) + ' resulted week nr ' + expectedweek);
                equal(resultweek, expectedweek, 'Week nr expected value: ' + expectedweek + ' Actual value: ' + resultweek + ' for year ' + i + ' month ' + month + ' day ' + day);
            }
        }
    }
});
martijn
la source
0

Cette semaine, le numéro a été une vraie douleur dans le a **. La plupart des scripts sur le net ne fonctionnaient pas pour moi. Ils ont travaillé la plupart du temps, mais tous ont cassé à un moment donné, surtout lorsque l'année a changé et que la dernière semaine de l'année était soudainement la première semaine de l'année prochaine, etc. semaine 53).

Remarque: les exemples sont conçus pour fonctionner avec les semaines européennes (le lundi en premier)!

getWeek ()

Date.prototype.getWeek = function(){

    // current week's Thursday
    var curWeek = new Date(this.getTime());
        curWeek.setDay(4);

    // Get year's first week's Thursday
    var firstWeek = new Date(curWeek.getFullYear(), 0, 4);
        firstWeek.setDay(4);

    return (curWeek.getDayIndex() - firstWeek.getDayIndex()) / 7 + 1;
};

setDay ()

/**
* Make a setDay() prototype for Date
* Sets week day for the date
*/
Date.prototype.setDay = function(day){

    // Get day and make Sunday to 7
    var weekDay = this.getDay() || 7;
    var distance = day - weekDay;
    this.setDate(this.getDate() + distance);

    return this;
}

getDayIndex ()

/*
* Returns index of given date (from Jan 1st)
*/

Date.prototype.getDayIndex = function(){
    var start = new Date(this.getFullYear(), 0, 0);
    var diff = this - start;
    var oneDay = 86400000;

    return Math.floor(diff / oneDay);
};

J'ai testé cela et cela semble fonctionner très bien, mais si vous remarquez une faille, faites-le moi savoir.

Spacha
la source
0

J'ai beaucoup essayé d'obtenir le code le plus court pour obtenir le numéro de semaine conforme ISO.

Date.prototype.getWeek=function(){
    var date=new Date(this);
    date.setHours(0,0,0,0);
    return Math.round(((date.setDate(this.getDate()+2-(this.getDay()||7))-date.setMonth(0,4))/8.64e7+3+(date.getDay()||7))/7)+"/"+date.getFullYear();}

La variable dateest nécessaire pour éviter d'altérer l'original this. J'ai utilisé les valeurs de retour de setDate()et setMonth()pour me passer de getTime()pour économiser la longueur du code et j'ai utilisé un nombre expontial pendant des millisecondes d'un jour au lieu d'une multiplication d'éléments simples ou d'un nombre avec cinq zéros. thisest la date ou le nombre de millisecondes, la valeur de retour est Stringpar exemple «49/2017».

Sven Huber
la source
0

Avec Luxon ( https://github.com/moment/luxon ):

import { DateTime } from 'luxon';
const week: number = DateTime.fromJSDate(new Date()).weekNumber;
NatoBoram
la source
0

Une autre option basée sur la bibliothèque: utilisez d3-time-format:

const formatter = d3.timeFormat('%U');
const weekNum = formatter(new Date());
ericsoco
la source
0

Solution de contournement la plus courte pour Angular2 + DatePipe, ajustée pour ISO-8601:

import {DatePipe} from "@angular/common";

public rightWeekNum: number = 0;
  
constructor(private datePipe: DatePipe) { }
    
calcWeekOfTheYear(dateInput: Date) {
  let falseWeekNum = parseInt(this.datePipe.transform(dateInput, 'ww'));
  this.rightWeekNum = (dateInput.getDay() == 0) ? falseWeekNumber-1 : falseWeekNumber;
}
connecté
la source
-1
now = new Date();
today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
firstOfYear = new Date(now.getFullYear(), 0, 1);
numOfWeek = Math.ceil((((today - firstOfYear) / 86400000)-1)/7);
Le Dang Duong
la source