Comment trouver la date d'un jour de la semaine à partir d'une date en utilisant PHP?

Si j'ai un $date YYYY-mm-dd et souhaitez obtenir un spécifique $day (spécifié par 0 (dimanche) à 6 (samedi)) de la semaine YYYY-mm-dd est dans.

Par exemple, si je suis 2012-10-11 comme $date et 5, comme $day, je veux obtenir 2012-10-12, si j'ai 0 comme $day, 2012-10-14

Modifier:
La plupart d'entre vous l'a mal comprise. J'ai une date, $date et je veux obtenir un jour spécifié par 0-6 de la même semaine $date est dedans.

Donc, non, je ne veux pas le jour de $date...

42
demandé sur SparK 2012-10-11 12:17:33

8 réponses

Je pense que c'est ce que vous voulez.

$dayofweek = date('w', strtotime($date));
$result    = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
73
répondu Rezigned 2012-10-11 08:41:21

, Vous pouvez utiliser la fonction date ():

date('w'); // day of week

Ou

date('l'); // dayname

Exemple de fonction pour obtenir le jour nr.:

function getWeekday($date) {
    return date('w', strtotime($date));
}

echo getWeekday('2012-10-11'); // returns 4
48
répondu powtac 2012-10-11 08:20:56

Essayez

$date = '2012-10-11';
$day  = 1;
$days = array('Sunday', 'Monday', 'Tuesday', 'Wednesday','Thursday','Friday', 'Saturday');
echo date('Y-m-d', strtotime($days[$day], strtotime($date)));
10
répondu air4x 2012-10-11 08:30:26

Juste:

2012-10-11 $par jour et de 5 $jour

<?php
$day=5;
$w      = date("w", strtotime("2011-01-11")) + 1; // you must add 1 to for Sunday

echo $w;

$sunday = date("Y-m-d", strtotime("2011-01-11")-strtotime("+$w day"));

$result = date("Y-m-d", strtotime($sunday)+strtotime("+$day day"));

echo $result;

?>

Le $ result = '2012-10-12' est ce que vous voulez.

3
répondu lijinma 2012-10-11 08:43:20

Manuel PHP dit:

W représentation Numérique du jour de la semaine

Vous pouvez donc construire une date avec mktime, et Y utiliser date("w", $yourTime);

2
répondu blue112 2012-10-11 08:26:08

Je crains que vous devez le faire manuellement. Obtenez le jour de la semaine en cours de la date, calculez le décalage et ajoutez le décalage à la date.

$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
    ->add(
        new DateInterval($offset."D")
    )->format('Y-m-d')
1
répondu John Dvorak 2012-10-11 08:37:18

J'ai dû utiliser une solution similaire pour le portugais (Brésil):

<?php
$scheduled_day = '2018-07-28';
$days = ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'];
$day = date('w',strtotime($scheduled_day));
$scheduled_day = date('d-m-Y', strtotime($scheduled_day))." ($days[$day])";
// provides 28-07-2018 (Sáb)
0
répondu Victor F 2018-07-19 19:00:32

Si votre date est déjà un DateTime ou DateTimeImmutable vous pouvez utiliser le format méthode.

$day_of_week = intval($date_time->format('w'));

La chaîne de format est identique à celle utilisée par la fonctiondate .


Pour répondre à la question prévue:

$date_time->modify($target_day_of_week - $day_of_week . ' days');
0
répondu Johannes Buchholz 2018-09-17 08:46:28