Se eu tiver um $date
YYYY-mm-dd
e quiser obter um específico $day
(especificado de 0 (domingo) a 6 (sábado)) da semana que YYYY-mm-dd
está em.
Por exemplo, se tenho 2012-10-11
como $date
e 5
como $day
, quero obter 2012-10-12
, se tenho 0
como $day
,2012-10-14
EDIT:
A maioria de vocês entendeu mal. Eu tenho uma data $date
e quero um dia especificado por 0-6 da mesma semana $date
em.
Então não, eu não quero o dia de $date
...
Respostas:
Eu acho que é isso que você quer.
$dayofweek = date('w', strtotime($date)); $result = date('Y-m-d', strtotime(($day - $dayofweek).' day', strtotime($date)));
fonte
Você pode usar a função date ():
date('w'); // day of week
ou
date('l'); // dayname
Função de exemplo para obter o número do dia:
function getWeekday($date) { return date('w', strtotime($date)); } echo getWeekday('2012-10-11'); // returns 4
fonte
Experimentar
$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)));
fonte
2012-10-14
quando você insere0
, @Rezigned retorna2012-10-07
Se sua data já for um
DateTime
ouDateTimeImmutable
você pode usar oformat
método.$day_of_week = intval($date_time->format('w'));
A string de formato é idêntica à usada pela função de data .
Para responder à pergunta pretendida:
$date_time->modify($target_day_of_week - $day_of_week . ' days');
fonte
Manual do PHP disse:
Você pode, portanto, construir uma data com mktime e usá-la
date("w", $yourTime);
fonte
Somente:
11/10/2012 como $ data e 5 como $ dia
<?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; ?>
O $ result = '2012-10-12' é o que você deseja.
fonte
Receio que você tenha que fazer isso manualmente. Obtenha o dia da semana atual da data, calcule o deslocamento e adicione o deslocamento à data.
$current = date("w", $date) $offset = $day - $current $new_date = new DateTime($date) ->add( new DateInterval($offset."D") )->format('Y-m-d')
fonte
Tive que usar uma solução semelhante para português (Brasil):
<?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)
fonte
<?php echo date("H:i", time()); ?> <?php echo $days[date("l", time())] . date(", d.m.Y", time()); ?>
Simples, isso deve funcionar
fonte