Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá Pessoal,
Estou criando um sistema de agendas simultâneas, e preciso mostrar na tela 3 conjuntos de datas (de segunda a domingo... ou de domingo a sábado, como for mais fácil).
Para isso, preciso criar a tabela a partir da data do início da semana. Estou tentando usar DateTime para gerar as datas, mas sempre está começando a partir de hoje, e não do começo da semana.
Como posso fazer para que contem a partir do domingo (ou da segunda) independente do dia que esteja?
$semana01 = new DateTime();
$semana01->setISODate($semana01->format('o'), $semana01->format('W'));
$semana01Periodo = new DatePeriod($semana01, new DateInterval('P1D'), 6);
$semana01Dias = iterator_to_array($semana01Periodo);
print_r($semana01Dias);
$semana02 = new DateTime();
$semana02->setISODate($semana02->format('o'), $semana02->format('W') + 1);
$semana02Periodo = new DatePeriod($semana02, new DateInterval('P1D'), 6);
$semana02Dias = iterator_to_array($semana02Periodo);
print_r($semana02Dias);
$semana03 = new DateTime();
$semana03->setISODate($semana03->format('o'), $semana03->format('W') + 2);
$semana03Periodo = new DatePeriod($semana03, new DateInterval('P1D'), 6);
$semana03Dias = iterator_to_array($semana03Periodo);
print_r($semana03Dias);O dia da semana atual você pega com date('w'); aí é só subtrair:
<?php
$weekday = date('w');
$firstDayOfWeek = strtotime(sprintf('-%ddays', $weekday));
Aí é sabido que que 1 dia tem 86400 segundos e que a semana inteira tem 7 dias; com isso conseguimos fazer:
for ($day = $firstDayOfWeek, $lastDayOfWeek = $firstDayOfWeek + (7*86400); $day < $lastDayOfWeek; $day += 86400) {
printf("%s\n", date('d/m/Y',$day));
}
Com isso sua saída será mais ou menos assim:
03-09-2017
04-09-2017
05-09-2017
06-09-2017
07-09-2017
08-09-2017
09-09-2017
Ou você pode ser preguiçoso e fazer tudo duma vez só:
<?php
$daysOfWeek = array_map(function($t) { return sprintf("%s\n", date('d/m/Y', $t)); }, range($firstDayOfWeek, $firstDayOfWeek + (7*86400), 86400));@Guilherme Luiz pela lógica, esta função pegaria os 7 dias anteriores, não? Não é isso que eu preciso... eu preciso pegar os dias da semana vigente, a partir de domingo (ou segunda).
/profile/94216-jo%C3%A3o-batista-neto/?do=hovercard" data-mentionid="94216" href="/profile/94216-jo%C3%A3o-batista-neto/" rel="">@João Batista Neto muito obrigado pela explanação!!
Mas já consegui! Aquela função mesmo que eu fiz alí fazia isso... mas como estava testando no começo da semana, devo ter pensado que ia dar problema quando mudasse o dia da semana haha.
talvez o strtotime ajude nisso não?
date('d/m/y',strtotime('-7days'));