2012-10-11 23 views
25

Se ho un $dateYYYY-mm-dd e vuole ottenere una specifica $day (specificato da 0 (domenica) a 6 (sabato)) della settimana che YYYY-mm-dd è in.Come trovare il giorno della settimana da una data usando PHP?

Per esempio, se ho ottenuto 2012-10-11 come $date e 5 come $day, voglio ottenere 2012-10-12, se ho 0 come $day, 2012-10-14

EDIT:
maggior parte di voi frainteso esso. Ho avuto qualche data, $date e voglio ottenere un giorno specificato dal 0-6 della stessa settimana $date è in.

Quindi no, non voglio che il giorno della $date ...

+0

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

+6

RTFM http://php.net/manual/en/function.date.php – VDP

+3

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

risposta

50

Penso che questo sia quello che vuoi.

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

Soluzione perfettamente semplice. Grazie – Zulakis

38

Puoi utilizzare la funzione data():

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

o

date('l'); // dayname 

funzione Esempio per ottenere il giorno nr .:

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

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

Manuale PHP ha detto:

w rappresentazione numerica del giorno della settimana

È possibile quindi costruire un appuntamento con mktime, e l'uso in esso date("w", $yourTime);

+0

Hai frainteso la mia domanda. Vedi la modifica sopra. – Zulakis

0

I temo che devi farlo manualmente Ottenere il giorno della settimana corrente della data, calcolare lo scostamento e aggiungere 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

6

Prova

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

Un buon approccio, ma come puoi vedere nella risposta di Rezigned, puoi anche usare "1 giorno", rendendo inutile l'array $ days. – Zulakis

2

Just:

2012-10-11 da $ data e 5 giorni da $

<?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 'è quello che vuoi.

Problemi correlati