Come trovare la data di un giorno della settimana da una data utilizzando PHP?


86

Se ho un $date YYYY-mm-dde voglio ottenere uno specifico $day(specificato da 0 (domenica) a 6 (sabato)) della settimana in cui si YYYY-mm-ddtrova.

Ad esempio, se ho 2012-10-11come $datee 5come $day, voglio ottenere 2012-10-12, se ho 0come $day,2012-10-14

EDIT:
La maggior parte di voi lo ha frainteso. Ho un appuntamento $datee desidero ottenere un giorno specificato da 0-6 della stessa settimana $date.

Quindi no, non voglio il giorno di $date...


Quando inizia la tua settimana? Lunedì o domenica? So che è lunedì per la maggior parte delle persone, ma mi sto solo assicurando: p
keyser

3
Non credo che le persone che hanno risposto abbiano capito bene la domanda. Non desidera ottenere un numero del giorno per data (che sarebbe data ('w')), ma desidera specificare la data E il numero del giorno e ricevere la data corrispondente dalla stessa settimana della data specificata .. .
Vafliik

Risposte:


128

Penso che questo sia quello che vuoi.

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

90

Puoi usare la funzione date ():

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

o

date('l'); // dayname

Funzione di esempio per ottenere il numero del giorno:

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

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

17

Provare

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

2
Buon approccio, ma come puoi vedere nella risposta di Rezigned, puoi anche usare "1 day", rendendo inutile l'array $ days.
Zulakis

1
Questo sembra più corretto perché restituisce la data corretta 2012-10-14quando inserisci 0, @Rezigned restituisce2012-10-07
Carl

7

Se la tua data è già un DateTimeo DateTimeImmutablepuoi usare il formatmetodo.

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

La stringa di formato è identica a quella utilizzata dalla funzione data .


Per rispondere alla domanda prevista:

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

5

Il manuale PHP ha detto:

w Rappresentazione numerica del giorno della settimana

Puoi quindi costruire una data con mktime e usarla date("w", $yourTime);


4

Appena:

2012-10-11 come $ date e 5 come $ day

<?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;

?>

Il $ risultato = "2012-10-12" è ciò che desideri.


1

Temo che tu debba farlo manualmente. Ottieni il giorno della settimana corrente della data, calcola l'offset e aggiungi l'offset alla data.

$current = date("w", $date)
$offset = $day - $current
$new_date = new DateTime($date)
    ->add(
        new DateInterval($offset."D")
    )->format('Y-m-d')

1
Grazie per il tuo approccio, ma no, non devo farlo manualmente. Dai un'occhiata alla risposta di Rezigned.
Zulakis

1

Ho dovuto usare una soluzione simile per il portoghese (Brasile):

<?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)

1
<?php echo date("H:i", time()); ?>
<?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>

Semplice, questo dovrebbe fare il trucco

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.