Obtenir la date du lundi et du vendredi pour la semaine en cours (PHP)
Comment puis-je obtenir la date du lundi et du vendredi pour la semaine en cours?
J'ai le code suivant, mais il échoue si le jour actuel est dimanche ou samedi.
$current_day = date("N");
$days_to_friday = 5 - $current_day;
$days_from_monday = $current_day - 1;
$monday = date("Y-m-d", strtotime("- {$days_from_monday} Days"));
$friday = date("Y-m-d", strtotime("+ {$days_to_friday} Days"));
8 réponses
Ces entrées strtotime fonctionnent très bien:
strtotime( "next monday" );
strtotime( "previous monday" );
strtotime( "today" );
strtotime( "next friday" );
strtotime( "previous friday" );
Tout ce que vous devez faire est d'envelopper la logique dans certaines instructions if.
La meilleure solution serait:
$monday = date( 'Y-m-d', strtotime( 'monday this week' ) );
$friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
Cette question a besoin D'une réponse DateTime: -
/**
* @param String $day
* @return DateTime
*/
function getDay($day)
{
$days = ['Monday' => 1, 'Tuesday' => 2, 'Wednesday' => 3, 'Thursday' => 4, 'Friday' => 5, 'Saturday' => 6, 'Sunday' => 7];
$today = new \DateTime();
$today->setISODate((int)$today->format('o'), (int)$today->format('W'), $days[ucfirst($day)]);
return $today;
}
Utilisation:
var_dump(getDay('Monday')->format('l dS F Y'));
var_dump(getDay('Friday')->format('l dS F Y'));
Sortie:
string 'Monday 30th September 2013' (length=26)
string 'Friday 04th October 2013' (length=24)
Cela dépend vraiment de la façon dont vous définissez une semaine mais je suis venu avec cette fonction qui vous donnera la date pour le "lundi" ou "vendredi" le plus proche (ou n'importe quel jour d'ailleurs):
function closestDate($day){
$day = ucfirst($day);
if(date('l', time()) == $day)
return date("Y-m-d", time());
else if(abs(time()-strtotime('next '.$day)) < abs(time()-strtotime('last '.$day)))
return date("Y-m-d", strtotime('next '.$day));
else
return date("Y-m-d", strtotime('last '.$day));
}
Entrée: Un jour de la semaine ("dimanche", "lundi", etc.)
Sortie: si j'ai demandé le "dimanche" le plus proche et aujourd'hui est:
- "dimanche": je vais obtenir la date d'aujourd'hui
- "lundi": j'aurai la date d'hier
- "samedi: j'aurai celui de demain date
J'espère que cela aide :)
Comme le suggère la réponse supérieure, utiliser la fonction strtotime() de PHP est le moyen le plus simple.
Cependant, au lieu d'utiliser les instructions if comme il le suggère, vous pouvez simplement réinitialiser le dimanche précédent et saisir les dates dont vous avez besoin à partir de là.
$monday = strtotime('next monday', strtotime('previous sunday'));
$friday = strtotime('next friday', strtotime('previous sunday'));
J'avais besoin d'une définition de la semaine en cours selon ISO 8601. Je veux que le lundi soit toujours défini comme le lundi qui a commencé cette semaine en cours.
La solution suivante fonctionne très bien pour moi:
$monday = strtotime(date('o-\WW'));
$friday = strtotime("next friday",$monday);
Pour $monday
, cette méthode retournera toujours le lundi qui a commencé cette semaine. malheureusement, cette méthode repose sur PHP 5.1 pour analyser le format de date o
.
Pour obtenir n'importe quel jour de la semaine, vous pourriez essayer:
function time_for_week_day($day_name, $ref_time=null){
$monday = strtotime(date('o-\WW',$ref_time));
if(substr(strtoupper($day_name),0,3) === "MON")
return $monday;
else
return strtotime("next $day_name",$monday);
}
Utilisation:
time_for_week_day('wednesday');
time_for_week_day('friday',strtotime('2014-12-25'));
Je cherchais une chose similaire, sauf que je voulais n'importe quel lundi, pas seulement cette semaine. C'est ce que je suis venu avec:
function getSunday(DateTime $date){
$outdate = clone($date);
$day = $date->format("w"); // get the weekday (sunday is 0)
$outdate->sub(new DateInterval("P".$day."D")); // subtracting the weekday from the date always gives Sunday
return $outdate;
}
Il accepte une date arbitraire et donne le dimanche. Ensuite, vous pouvez facilement ajouter des jours de retour pour obtenir du lundi au samedi.
J'utilise:
$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 + 4 days', strtotime('this sunday')));