Voici un résumé du problème: Le dimanche, strtotime('this week')
renvoie le début de la semaine prochaine.
En PHP, la semaine semble commencer le lundi. Mais, n'importe quel jour sauf le dimanche, ce code
echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
Affiche la date du lundi de cette semaine, alors qu'il semble devoir être affiché lundi dernier. Il semble que, dans ce cas, PHP traite dimanche et lundi comme le début de la semaine. Nous sommes maintenant le lundi 10 décembre 2012 ou 2012-12-10. date('Y-m-d', strtotime('sunday last week'))
renvoie 2012-12-09
- hier.
Est-ce un bug ou est-ce que je manque quelque chose? Il semble qu'un bug aussi évident devrait être connu, mais je ne trouve rien à ce sujet. Est-ce le seul moyen de faire en sorte que le début de la semaine utilise un traitement spécial le dimanche?
$week_offset = (int) 'sunday' == date('l');
$week_start = strtotime("-$week_offset monday"); // 1 or 0 Mondays ago
Autant que je sache, c'est un bug. Je ne vois aucune raison logique pour laquelle strtotime('this week');
devrait renvoyer une date future. C'est un très gros bug. Dans mon cas particulier, j'ai eu un classement qui a montré aux utilisateurs avec le plus de points depuis le début de la semaine. Mais le dimanche, il était vide car strtotime
renvoyait un horodatage pour une date ultérieure. J'étais douteux, parce que je ne savais pas comment cela aurait pu passer inaperçu, mais je n'ai pu trouver aucun autre rapport sur ce bogue.
Merci pour tout votre temps et votre aide, mes amis.
Voici comment vous pouvez obtenir le lundi de la semaine en cours:
echo date("Y-m-d", strtotime(date('o-\\WW')));
Cette réponse est en retard, mais c'est quelque chose avec lequel j'ai eu du mal. Chaque solution que j'ai essayée jusqu'à présent a mal fonctionné pour une raison ou une autre. C'est ce que j'ai fini avec qui a fonctionné pour moi. (bien que ça puisse être joli, ça marche au moins).
$thisMonday = strtotime('next Monday -1 week', strtotime('this sunday'));
Ce n’est pas idéal mais c’est ce que j’ai eu recours:
if(date('N') == 7) {
$date = date('Y-m-d',strtotime('monday last week'));
} else {
$date = date('Y-m-d',strtotime('monday this week'));
}
I think the only problem with your coding is TimeZone.
Solution:
Définissez votre propre fuseau horaire. Voici l'exemple de mon propre fuseau horaire:
Exemple
date_default_timezone_set('Asia/Kolkata');
Set the above line before calling any time function.
Bonne journée.
Basé sur Bryant réponse:
$first_week_date = date('d F Y', strtotime('next Monday -1 week', strtotime('this sunday')));
$last_week_date = date('d F Y', strtotime('next Monday -1 week + 6 days', strtotime('this sunday')));
Ceci est pour ceux qui recherchent une solution amicale qui fonctionne avec n'importe quel jour.
function getWeekStart($week_start_day = "Monday") {
$week_days = array("Sunday"=>0,"Monday"=>1,"Tuesday"=>2,"Wednesday"=>3,"Thursday"=>4,"Friday"=>5,"Saturday"=>6,);
if(!isset($week_days[$week_start_day])) {
return false;
} else {
$start_day = $week_days[$week_start_day];
$today = date("w");
$one_day = (60 * 60 * 24);
if($today < $start_day) {
$days_difference = 7 - ($start_day - $today);
} else {
$days_difference = ($today - $start_day);
}
$week_starts = strtotime(date("Y-m-d 00:00:00")) - ($one_day * $days_difference);
return $week_starts;
}
}
//Test: If today is Monday, it will return today's date
echo date("Y-m-d H:i:s", getWeekStart("Monday"));
Je pense au lieu d'essayer
echo date('Y-m-d', strtotime('monday this week', strtotime('last sunday')));
tu devrais essayer
echo date('Y-m-d', strtotime('monday last week'));
Essayez ce code
// set current date
$date = date("m/d/Y");
$ts = strtotime($date); // also $ts = time();
// find the year and the current week
$year = date('o', $ts);
$week = date('W', $ts);
// print week for the current date
$i = 1; // 1 denotes the first day of week
$ts = strtotime($year.'W'.$week.$i);
echo $day = date("l", $ts); // generate the name of day
echo "<br>";
echo $day = date("Y-m-d", $ts); // generate the date
Vous obtiendrez la date de la semaine en cours. Que vous soyez lundi ou non, vous obtiendrez la date de ce lundi.
Si vous voulez le lundi le plus récent:
function mostRecentMonday(){
if(date("w") == 1){
return strtotime("midnight today");
} else {
return strtotime("last monday");
}
}
Facile à modifier pour utiliser DateTime, ou même pour spécifier une date différente à utiliser comme base.