J'ai un objet today = new Date();
. J'ai besoin d'obtenir le premier et le dernier jour de la semaine en cours. J'ai besoin des deux variantes pour le dimanche et le lundi comme un jour de début et de fin de la semaine. Je suis un peu confus maintenant avec un code. Tu peux m'aider ?
Réponses
Trop de publicités?var curr = new Date; // get current date
var first = curr.getDate() - curr.getDay(); // First day is the day of the month - the day of the week
var last = first + 6; // last day is the first day + 6
var firstday = new Date(curr.setDate(first)).toUTCString();
var lastday = new Date(curr.setDate(last)).toUTCString();
firstday
"Sun, 06 Mar 2011 12:25:40 GMT"
lastday
"Sat, 12 Mar 2011 12:25:40 GMT"
Cela fonctionne pour le premier jour = dimanche de cette semaine et le dernier jour = samedi de cette semaine. L'étendre pour courir du lundi au dimanche est trivial.
Faire fonctionner avec le premier et le dernier jour dans différents mois est laissé comme un exercice pour l'utilisateur
Vous pouvez également utiliser les lignes de code suivantes pour obtenir la première et la dernière date de la semaine :
var curr = new Date;
var firstday = new Date(curr.setDate(curr.getDate() - curr.getDay()));
var lastday = new Date(curr.setDate(curr.getDate() - curr.getDay()+6));
J'espère que ce sera utile.
L'excellente (et immuable) librairie date-fns gère cela de la façon la plus concise :
const start = startOfWeek(date);
const end = endOfWeek(date);
Le
jour de début par défaut de la semaine est le dimanche (0), mais il peut être changé en lundi (1) comme suit :
const start = startOfWeek(date, {weekStartsOn: 1});
const end = endOfWeek(date, {weekStartsOn: 1});
Voici un moyen rapide d'obtenir le premier et le dernier jour, pour n'importe quel jour de début. sachant que :
1 jour = 86,400,000 millisecondes.
Les valeurs des dates JS sont en millisecondes
Recette : déterminez combien de jours vous devez supprimer pour obtenir le jour de début de votre semaine (multipliez par une valeur de 1 jour de millisecondes). Tout ce qui reste après cela est d'ajouter 6 jours pour obtenir votre jour de fin.
var startDay = 1; //0=sunday, 1=monday etc.
var d = now.getDay(); //get the current day
var weekStart = new Date(now.valueOf() - (d<=0 ? 7-startDay:d-startDay)*86400000); //rewind to start day
var weekEnd = new Date(weekStart.valueOf() + 6*86400000); //add 6 days to get last day