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"));
27
demandé sur Salman A 2009-09-16 12:15:06

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.

58
répondu Salman A 2009-09-17 06:09:41

La meilleure solution serait:

$monday = date( 'Y-m-d', strtotime( 'monday this week' ) );
$friday = date( 'Y-m-d', strtotime( 'friday this week' ) );
47
répondu Johannes Grandy 2015-09-18 13:29:43

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)

Voir travail

10
répondu vascowhite 2015-08-13 13:57:32

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:

  1. "dimanche": je vais obtenir la date d'aujourd'hui
  2. "lundi": j'aurai la date d'hier
  3. "samedi: j'aurai celui de demain date

J'espère que cela aide :)

1
répondu karancan 2013-07-03 17:42:04

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'));
1
répondu davidandrew 2015-04-23 11:38:38

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'));
0
répondu MjrKusanagi 2014-11-18 02:47:09

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.

0
répondu jgreep 2015-12-15 14:44:30

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')));
0
répondu Baim Wrong 2017-07-20 18:12:51