web-dev-qa-db-fra.com

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

Si j'ai un $dateYYYY-mm-dd et que je souhaite obtenir un $day spécifique (spécifié par 0 (dimanche) à 6 (samedi)) de la semaine dans laquelle se trouve YYYY-mm-dd.

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

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

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

50
Zulakis

Je pense que c'est ce que tu veux.

$dayofweek = date('w', strtotime($date));
$result    = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
78
Rezigned

Vous pouvez utiliser la fonction date ():

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

ou 

date('l'); // dayname

Exemple de fonction pour obtenir le numéro de la journée:

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

echo getWeekday('2012-10-11'); // returns 4
55
powtac

Essayer

$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)));
11
air4x

Juste:

2012-10-11 en $ date et 5 en $ 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.

4
lijinma

PHP Manual a déclaré:

w Représentation numérique du jour de la semaine

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

3
blue112

Si votre date est déjà une DateTime ou une DateTimeImmutable, vous pouvez utiliser la méthode format.

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

La chaîne de formatage est identique à celle utilisée par la fonction date .


Pour répondre à la question voulue:

$date_time->modify($target_day_of_week - $day_of_week . ' days');
2
Johannes Buchholz

J'ai bien peur que vous deviez le faire manuellement ..__ Obtenez le jour de la semaine en cours, 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
John Dvorak
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>

Simple, cela devrait faire l'affaire

0
Rune Bøge

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
Victor F