Qu'entendez-vous par premier jour de la semaine? Voulez-vous dire Sun, Mon? Ou voulez-vous dire la date du premier jour de la semaine?
Jeffrey Hines
2
Le premier jour de la semaine est constant: c'est lundi (ou éventuellement dimanche). Voulez-vous dire que vous voulez obtenir la date du lundi précédant une date arbitraire donnée?
Jon Cram
Quelle version de PHP - 4 ou 5?
Jon Cram
la date du dimanche de la semaine. php 5
Iggy Ma
Etrange, il demande une DateTimesolution et la plupart des réponses ne la fournissent pas. =)
$ day contient un nombre de 0 à 6 représentant le jour de la semaine (dimanche = 0, lundi = 1, etc.). $ week_start contient la date du dimanche de la semaine en cours sous la forme mm-jj-aaaa. $ week_end contient la date du samedi de la semaine en cours sous la forme mm-jj-aaaa.
this weekne fonctionne pas si vous devez toujours avoir un début de semaine précédent, mais le commentaire de @ LewisBuckley le fait.
Smar
Le deuxième argument time()est optionnel si vous souhaitez le spécifier aujourd'hui.
Ifnot
ne fonctionnait pas pour moi, je devais utiliser une syntaxe légèrement différente pour YTD, MTD, WTD.
Ron
6
Cette réponse produit des résultats incohérents, selon la version PHP utilisée: La solution de 3v4l.org/Z3k4E @ LewisBuckley est cohérente pour toutes les versions: 3v4l.org/Eeh9c
Les descriptions relatives comme cette semaine ont leur propre contexte. Ce qui suit montre la sortie pour cette semaine lundi et dimanche quand c'est un lundi ou un dimanche:
$date ='2015-03-16';// monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
$date ='2015-03-22';// sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
pourquoi cela ne fonctionne-t-il pas pour la date 2016-06-05, ses dates des prochaines semaines
1
Merci pour cela, je viens de modifier ce code pour pouvoir passer un paramètre de date optionnel $ dt = $ custom_date? strtotime ($ date_personnalisée): heure (); $ lundi = date ("Ymd", strtotime ('lundi cette semaine', $ dt)); $ dimanche = date ("Ymd", strtotime ('dimanche cette semaine', $ dt));
Ron Michael
47
Rester simple :
<?php
$dateTime =new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday'== $dateTime->format('l'))?'Monday last week':'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');?>
edit: faute de frappe ou une syntaxe inconnue? d'où vient le \? $dateTime = new \DateTime('2012-05-14');
Sliq
2
Je fais cela pour éviter tout conflit avec un éventuel objet autochargé de votre application. C'est comme un chemin absolu ou un chemin relatif.
job3dot5
9
@Panique - la "syntaxe inconnue" est la syntaxe d'espace de noms de PHP 5.3. L'espacement de noms vous permet de préfixer une classe avec un espace de noms suivi d'une barre oblique inverse. Ici, il l'utilise sans espace de noms afin de spécifier la DateTimeclasse principale , ce qui signifie que le code fonctionnera même si vous avez une autre classe appelée DateTimedans l'espace de noms actuel.
Spudley
Le nom du jour est-il toujours en anglais?
Marwelln
1
La partie clonée ne fonctionne pas correctement. Vous devez d'abord cloner puis effectuer l'opération sur le clonage si vous en avez besoin d'un original.
Farid Movsumov
25
$givenday = date("w", mktime(0,0,0, MM, dd, yyyy));
Cela vous donne le jour de la semaine de la date donnée elle-même où 0= dimanche et 6= samedi. De là, vous pouvez simplement calculer à rebours le jour que vous souhaitez.
Cette réponse renvoie si une date donnée est le dimanche ou le lundi, etc. Mais, l'interlocuteur a demandé la date du dimanche de la semaine de la date donnée comme mentionné dans son commentaire sur la question initiale.
Rakib
19
Cette question nécessite une bonne réponse DateTime : -
function firstDayOfWeek($date){
$day =DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'),(int)$day->format('W'),1);return $day->format('m-d-Y');}
var_dump(firstDayOfWeek('06-13-2013'));
Production:-
string'06-10-2013'(length=10)
Cela traitera des limites des années et des années bissextiles.
EDIT: le lien ci-dessous ne fonctionne plus sur la version de PHP indiquée. Il fonctionne sur PHP 5.6, ce qui améliore la fiabilité de strtotime, mais n'est pas parfait! Les résultats dans le tableau sont des résultats en direct de PHP 5.6.
Pour ce que ça vaut, voici une ventilation du comportement bancal de strtotime lors de la détermination d'un cadre de référence cohérent:
En gros, seules ces chaînes vous donneront de manière fiable la même date, quel que soit le jour de la semaine où vous vous trouvez lorsque vous les appelez:
L'article a également donné un code spécifique à utiliser: $ start_of_week = strtotime ("lundi prochain - 1 semaine"); // Renvoie le lundi de la semaine en cours à partir de 00:00:00 "$ end_of_week = strtotime (" prochain lundi - 1 seconde "); // Renvoie le dimanche de la semaine en cours se terminant à 23:59:59"
Scott M. Stolz
11
Le code suivant doit fonctionner avec n'importe quelle date personnalisée, utilise simplement le format de date souhaité.
Il convient de noter que cela retournera toujours le lundi précédent, donc si $ custom_date est un lundi, il renverra la date du lundi une semaine plus tôt.
Hill79
2
Ne fonctionne pas correctement, aujourd'hui est dimanche, les résultats sont: Début: 09-09-2013 Fin: 22-09-2013
user2019515
10
En supposant que le lundi soit le premier jour de la semaine, cela fonctionne:
"MM-jj-aaaa" n'est pas la même chose que "Ymd", veuillez adapter votre réponse aux spécificités de la question.
Yevgeniy Afanasyev
1
date ("MM-jj-aaaa") renvoie la date sous la forme: NovNov-0202-15151515. J'espère que cela devrait être: date ("Mdy") qui affiche une date lisible comme: 02-nov-15
shasi kanth
"MM-jj-aaaa" vient de la question. Si vous n'êtes pas sûr de ce que cela signifie, posez-le dans un commentaire sur la question. Merci d'avoir modifié votre réponse.
Le dernier lundi du lundi vous donnera le lundi précédent.
Ikke
8
C'est ce que j'utilise pour obtenir le premier et le dernier jour de la semaine à n'importe quelle date . Dans ce cas, le lundi est le premier jour de la semaine ...
$date = date('Y-m-d')// you can put any date you want
$nbDay = date('N', strtotime($date));
$monday =newDateTime($date);
$sunday =newDateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
Étant donné la version PHP antérieure à 5.3, la fonction suivante vous donne un premier jour de la semaine à une date donnée (dans ce cas - dimanche, 03/02/2013):
<?php
function startOfWeek($aDate){
$d=strtotime($aDate);return strtotime(date('Y-m-d',$d).' - '.date("w",$d).' days');}
echo(date('Y-m-d',startOfWeek("2013-02-07")).'
');?>
Vous devez d'abord obtenir le lundi suivant, puis obtenir le «dernier lundi» du lundi prochain. Donc, si la date donnée est lundi, elle retournera la même date pas la semaine dernière lundi.
Qu'est-ce qui rend cela préférable à cette réponse ou à cette réponse ? Il me semble qu'il y a plus qu'assez d'options dans les 30 autres réponses ...
Mogsdad
THX. c'est une solution simple et cela fonctionne comme un charme.
Oleg Popov
2
Une façon intelligente de le faire est de laisser PHP gérer les différences de fuseau horaire et l'heure d'été (DST). Laissez-moi vous montrer comment faire cela.
Cette fonction générera tous les jours du lundi au vendredi inclus (pratique pour générer des jours de semaine de travail):
Cela renverra les heures du lundi au vendredi pour la semaine en cours. Pour faire de même pour une date arbitraire, passez une date en paramètre à DateTimeUtilities ::getPeriodFromMondayUntilFriday, ainsi:
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver');//Set apprpriate timezone
$start_date = strtotime('2009-12-15');//Set start date//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0,0,0, date('m', $start_date), date('d', $start_date), date('Y', $start_date))-((date("w", $start_date)==0)?0:(86400* date("w", $start_date)));//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);?>
(Remarque: MM, jj et aaaa dans la question ne sont pas une syntaxe de format de date php standard - je ne peux pas être sûr de ce que cela signifie, j'ai donc défini $ start_date avec ISO année-mois-jour)
Le moyen le plus simple d'obtenir le premier jour (lundi) de la semaine en cours est:
strtotime("next Monday")-604800;
où 604800 - est le nombre de secondes dans 1 semaine (60 * 60 * 24 * 7).
Ce code est récupéré lundi prochain et diminue pendant 1 semaine. Ce code fonctionnera bien n'importe quel jour de la semaine. Même si aujourd'hui c'est lundi.
Utile lorsque nous avons le lundi comme premier jour de la semaine (du lundi au dimanche).
Kamran Mushtaq
0
Je me suis heurté à cette question à plusieurs reprises et j'ai toujours été surpris que les fonctions de date ne rendent pas cela plus facile ou plus clair. Voici ma solution pour PHP5 qui utilise la DateTimeclasse:
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/function getFirstDayOfWeek(DateTime $date, $firstDay =0){
$offset =7- $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w')+ $offset)%7).'days');return $ret;}
Nécessaire de cloner pour éviter de modifier la date d'origine.
DateTime
solution et la plupart des réponses ne la fournissent pas. =)Réponses:
Voici ce que j'utilise ...
$ day contient un nombre de 0 à 6 représentant le jour de la semaine (dimanche = 0, lundi = 1, etc.).
$ week_start contient la date du dimanche de la semaine en cours sous la forme mm-jj-aaaa.
$ week_end contient la date du samedi de la semaine en cours sous la forme mm-jj-aaaa.
la source
Remplacez time (). Les méthodes du dimanche suivant / dernier lundi ne fonctionneront pas lorsque le jour actuel est dimanche / lundi.
la source
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
ne fonctionne pas si vous devez toujours avoir un début de semaine précédent, mais le commentaire de @ LewisBuckley le fait.time()
est optionnel si vous souhaitez le spécifier aujourd'hui.strtotime
Fonction très simple à utiliser :Cela diffère un peu selon les versions de PHP :
Sortie pour 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Sortie pour 4.3.5 - 5.2.17
Sortie pour 4.3.0 - 4.3.4
Comparaison aux Edge-Cases
Les descriptions relatives comme cette semaine ont leur propre contexte. Ce qui suit montre la sortie pour cette semaine lundi et dimanche quand c'est un lundi ou un dimanche:
Cependant, cela diffère un peu selon les versions de PHP :
Sortie pour 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Sortie pour 4.3.5 - 5.0.5, 5.2.0 - 5.2.17
Sortie pour 5.1.0 - 5.1.6
Sortie pour 4.3.0 - 4.3.4
la source
Rester simple :
Source: manuel PHP
NB: comme certains utilisateurs l'ont commenté, la valeur de $ dateTime sera modifiée.
la source
$dateTime = new \DateTime('2012-05-14');
DateTime
classe principale , ce qui signifie que le code fonctionnera même si vous avez une autre classe appeléeDateTime
dans l'espace de noms actuel.Cela vous donne le jour de la semaine de la date donnée elle-même où
0
= dimanche et6
= samedi. De là, vous pouvez simplement calculer à rebours le jour que vous souhaitez.la source
Cette question nécessite une bonne réponse DateTime : -
Production:-
Cela traitera des limites des années et des années bissextiles.
la source
EDIT: le lien ci-dessous ne fonctionne plus sur la version de PHP indiquée. Il fonctionne sur PHP 5.6, ce qui améliore la fiabilité de strtotime, mais n'est pas parfait! Les résultats dans le tableau sont des résultats en direct de PHP 5.6.
Pour ce que ça vaut, voici une ventilation du comportement bancal de strtotime lors de la détermination d'un cadre de référence cohérent:
http://gamereplays.org/reference/strtotime.php
En gros, seules ces chaînes vous donneront de manière fiable la même date, quel que soit le jour de la semaine où vous vous trouvez lorsque vous les appelez:
la source
Le code suivant doit fonctionner avec n'importe quelle date personnalisée, utilise simplement le format de date souhaité.
J'ai testé le code avec PHP 5.2.17 Résultats:
la source
En supposant que le lundi soit le premier jour de la semaine, cela fonctionne:
la source
Que dis-tu de ça?
la source
C'est ce que j'utilise pour obtenir le premier et le dernier jour de la semaine à n'importe quelle date . Dans ce cas, le lundi est le premier jour de la semaine ...
la source
Ici, je considère le dimanche comme le premier et le samedi comme le dernier jour de la semaine.
Production :
Début: 05-08-2012
Fin: 11-08-2012
la source
Que dis-tu de ça?
la source
Essaye ça:
(à partir de ce fil de discussion )
la source
C'est la solution la plus courte et la plus lisible que j'ai trouvée:
strtotime
est plus rapide quenew DateTime()->getTimestamp()
.la source
Juste utiliser
date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
la source
Étant donné la version PHP antérieure à 5.3, la fonction suivante vous donne un premier jour de la semaine à une date donnée (dans ce cas - dimanche, 03/02/2013):
la source
la source
Vous devez d'abord obtenir le lundi suivant, puis obtenir le «dernier lundi» du lundi prochain. Donc, si la date donnée est lundi, elle retournera la même date pas la semaine dernière lundi.
la source
Si vous voulez que le lundi soit le début de votre semaine, procédez comme suit:
la source
Une façon intelligente de le faire est de laisser PHP gérer les différences de fuseau horaire et l'heure d'été (DST). Laissez-moi vous montrer comment faire cela.
Cette fonction générera tous les jours du lundi au vendredi inclus (pratique pour générer des jours de semaine de travail):
Cela renverra les heures du lundi au vendredi pour la semaine en cours. Pour faire de même pour une date arbitraire, passez une date en paramètre à
DateTimeUtilities ::getPeriodFromMondayUntilFriday
, ainsi:Uniquement intéressé par lundi, comme le PO l'a demandé?
la source
Vous analysez la date en utilisant
strptime()
et utilisezdate()
sur le résultat:la source
(Remarque: MM, jj et aaaa dans la question ne sont pas une syntaxe de format de date php standard - je ne peux pas être sûr de ce que cela signifie, j'ai donc défini $ start_date avec ISO année-mois-jour)
la source
Une autre façon de le faire ...
la source
Le moyen le plus simple d'obtenir le premier jour (lundi) de la semaine en cours est:
où 604800 - est le nombre de secondes dans 1 semaine (60 * 60 * 24 * 7).
Ce code est récupéré lundi prochain et diminue pendant 1 semaine. Ce code fonctionnera bien n'importe quel jour de la semaine. Même si aujourd'hui c'est lundi.
la source
J'ai trouvé cela assez frustrant étant donné que mon fuseau horaire est australien et que
strtotime()
déteste les dates britanniques.Si le jour en cours est un dimanche, il
strtotime("monday this week")
reviendra le lendemain.Pour surmonter cela:
la source
Voici un one-liner pour le premier jour de la semaine dernière et le dernier jour de la semaine dernière en tant
DateTime
qu'objet.la source
la source
Je me suis heurté à cette question à plusieurs reprises et j'ai toujours été surpris que les fonctions de date ne rendent pas cela plus facile ou plus clair. Voici ma solution pour PHP5 qui utilise la
DateTime
classe:Nécessaire de cloner pour éviter de modifier la date d'origine.
la source
Qu'en est-il de:
Ce n'est pas le meilleur moyen, mais j'ai testé et si je suis dans cette semaine, j'obtiens le bon lundi, et si je suis un lundi, j'aurai ce lundi.
la source