Jeśli mam $date
YYYY-mm-dd
i chcę uzyskać konkretny $day
(określony przez 0 (niedziela) do 6 (sobota)) tygodnia, w którym YYYY-mm-dd
jest.
Na przykład, jeśli mam 2012-10-11
jako $date
i 5
jako $day
, chcę uzyskać 2012-10-12
, jeśli mam 0
jako $day
,2012-10-14
EDYCJA:
Większość z was źle to zrozumiała. Mam datę $date
i chcę otrzymać dzień określony przez 0-6 tego samego tygodnia, $date
w którym jest.
Więc nie, nie chcę dnia $date
...
Odpowiedzi:
Myślę, że tego chcesz.
$dayofweek = date('w', strtotime($date)); $result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
źródło
Możesz użyć funkcji date ():
date('w'); // day of week
lub
date('l'); // dayname
Przykładowa funkcja pobierania numeru dnia:
function getWeekday($date) { return date('w', strtotime($date)); } echo getWeekday('2012-10-11'); // returns 4
źródło
Próbować
$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)));
źródło
2012-10-14
po wprowadzeniu0
, @Rezigned zwraca2012-10-07
Jeśli Twoja randka już jest
DateTime
lubDateTimeImmutable
możesz skorzystać zformat
metody.$day_of_week = intval($date_time->format('w'));
Ciąg formatu jest taki sam, jak używany przez funkcję daty .
Aby odpowiedzieć na zamierzone pytanie:
$date_time->modify($target_day_of_week - $day_of_week . ' days');
źródło
Podręcznik PHP powiedział:
Możesz zatem skonstruować datę za pomocą mktime i użyć w niej
date("w", $yourTime);
źródło
Właśnie:
2012-10-11 jako $ date i 5 jako $ 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; ?>
Wynik $ = '2012-10-12' jest tym, czego chcesz.
źródło
Obawiam się, że musisz to zrobić ręcznie. Uzyskaj bieżący dzień tygodnia daty, oblicz przesunięcie i dodaj przesunięcie do daty.
$current = date("w", $date) $offset = $day - $current $new_date = new DateTime($date) ->add( new DateInterval($offset."D") )->format('Y-m-d')
źródło
Musiałem użyć podobnego rozwiązania dla portugalskiego (Brazylia):
<?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)
źródło
<?php echo date("H:i", time()); ?> <?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>
To proste, powinno załatwić sprawę
źródło