Obtenez le dimanche le plus récemment

J'ai besoin d'afficher la semaine en cours dans une vue d'agenda, à partir de dimanche.

Quelle est la façon la plus sûre de déterminer «dernier dimanche» en version javascript?

Je l'ai calculé en utilisant le code suivant:

Date.prototype.addDays = function(n) { return new Date(this.getTime() + (24*60*60*1000)*n); } var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var lastSunday = today.addDays(0-today.getDay()); 

Ce code fait l'hypothèse que chaque jour se compose de vingt-quatre heures. Ceci est correct, SAUF s'il s'agit d'un jour de croisement de l'heure d'été, auquel cas le jour pourrait être vingt-trois ou vingt-cinq heures.

Cette semaine, à Sydney, en Australie, nous mettons nos horloges en avant une heure. En conséquence, mon code calcule le dernier lastSunday à 23h00 le samedi.

Alors, quel est le moyen le plus sûr et le plus efficace de déterminer le dimanche dernier?

Pour ajouter de manière sûre exactement un jour, utilisez:

 d.setDate(d.getDate() + 1); 

Qui est la sécurité d'été. Pour définir un objet de date au dernier dimanche:

 function setToLastSunday(d) { return d.setDate(d.getDate() - d.getDay()); } 

Ou pour renvoyer un nouvel objet Date pour dimanche dernier:

 function getLastSunday(d) { var t = new Date(d); t.setDate(t.getDate() - t.getDay()); return t; } 

modifier

La réponse originale avait une version incorrecte ajoutant du temps, qui ajoute un jour, mais pas la façon dont l'OP veut.

Essayez ce jsfiddle

Il n'utilise que des méthodes intégrées

 var now = new Date(); var today = new Date(now.getFullYear(), now.getMonth(), now.getDate()); var lastSunday = new Date(today.setDate(today.getDate()-today.getDay()));