Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia a todos.
Quero o seguinte, que o sistema exiba a data de inicio e termino de bissemanas.
Tenho um calendário de outdoors onde a data para a reserva é exibida no formato 11/11 até 24/11.
A semana sempre deve começar na segunda e é contada de 2 em 2.
Então quero saber como posso fazer que o sistema exiba essas datas no ano corrente.
Desde já agradeço a todos.
Obrigado pela lógica @ESerra.
Mas como eu poderia fazer isso? Não entendo muito das funções date e strtotime...
No caso o calendário iria começar na 1ª semana do ano, então deveria capturar o primeiro dia e fazer o que você disse.
É um tanto complicado encontar uma implementação sem um escopo. Como eu gosto de trabalhar com a bibliteca DateTime, já tinha exemplos prontos.
$date = new DateTime('01-01-2014');
/ buscar a primeira segunda feira após à partir da data informada /
while((int)$date->format('N') != 1) {
/ adiciona 1 dia a data /
$date->add(new DateInterval('P1D'));
}
/ clona a data /
$dateTermino = clone $date;
/ adiciona 13 dias a data de termino, a data atual + 13 (duas semanas) /
$dateTermino->add(new DateInterval('P13D'));
printf('%s até %s' , $date->format('d/m/Y') , $dateTermino->format('d/m/Y'));06/01/2014 até 19/01/2014
Para o ano todo, basta adicionar DatePerioda função:
$date = new DateTime('01-01-2014');
/ buscar a primeira segunda feira após à partir da data informada /
while((int)$date->format('N') != 1) {
/ adiciona 1 dia a data /
$date->add(new DateInterval('P1D'));
}
/ cria o periodo anual de uma semana para cada data /
$datePeriod = new DatePeriod($date , new DateInterval('P1W') , new DateTime('2014-12-31'));
foreach($datePeriod AS $date) {
/** clona a data **/
$dateTermino = clone $date;
/** adiciona 13 dias a data de termino, a data atual + 13 (duas semanas) **/
$dateTermino->add(new DateInterval('P13D'));
printf('%s até %s' , $date->format('d/m/Y') , $dateTermino->format('d/m/Y'));
}06/01/2014 até 19/01/201413/01/2014 até 26/01/2014 20/01/2014 até 02/02/2014 27/01/2014 até 09/02/2014 03/02/2014 até 16/02/2014 10/02/2014 até 23/02/2014 17/02/2014 até 02/03/2014 24/02/2014 até 09/03/2014 03/03/2014 até 16/03/2014 10/03/2014 até 23/03/2014 17/03/2014 até 30/03/2014 24/03/2014 até 06/04/2014 31/03/2014 até 13/04/2014 07/04/2014 até 20/04/2014 14/04/2014 até 27/04/2014 21/04/2014 até 04/05/2014 28/04/2014 até 11/05/2014 05/05/2014 até 18/05/2014 12/05/2014 até 25/05/2014 19/05/2014 até 01/06/2014 26/05/2014 até 08/06/2014 02/06/2014 até 15/06/2014 09/06/2014 até 22/06/2014 16/06/2014 até 29/06/2014 23/06/2014 até 06/07/2014 30/06/2014 até 13/07/2014 07/07/2014 até 20/07/2014 14/07/2014 até 27/07/2014 21/07/2014 até 03/08/2014 28/07/2014 até 10/08/2014 04/08/2014 até 17/08/2014 11/08/2014 até 24/08/2014 18/08/2014 até 31/08/2014 25/08/2014 até 07/09/2014 01/09/2014 até 14/09/2014 08/09/2014 até 21/09/2014 15/09/2014 até 28/09/2014 22/09/2014 até 05/10/2014 29/09/2014 até 12/10/2014 06/10/2014 até 19/10/2014 13/10/2014 até 26/10/2014 20/10/2014 até 02/11/2014 27/10/2014 até 09/11/2014 03/11/2014 até 16/11/2014 10/11/2014 até 23/11/2014 17/11/2014 até 30/11/2014 24/11/2014 até 07/12/2014 01/12/2014 até 14/12/2014 08/12/2014 até 21/12/2014 15/12/2014 até 28/12/2014 22/12/2014 até 04/01/2015 29/12/2014 até 11/01/2015
Gabriel, é isso que eu preciso.
Tem como colocar também o número da semana na frente? Pra ficar 46ª - 04/11 até 17/11
Mas assim, ta aparecendo a data contando em bissemana pra cada semana do ano. no caso deveria ser contado de 2 em 2 só.. Começar na 1ª depois ir pra 3ª e assim por diante..
É possível fazer uma função pra aceitar o número da semana e exibir o período?
ATUALIZAÇÃO:
Consegui colocar pra contar de 2 em 2.
Tem um problema que não pode acontecer.
Por exemplo, tem o ano de 2013, para o esquema de outdoors o dia 31 de dezembro de 2012 faz parte da primeira semana do ano de 2013, pois é contado a partir da segunda. A primeira semana do ano começaria dia 31/12/2012 até 13/01/2013
Tem como adicionar essa data tbm?
Apesar de eu ter lhe entregado a faca e o queijo, não posso cortar pra você.
Como eu já disse, tinha os códigos prontos. O resto, é contigo. Um pouco de estudo não fará mal nenhum.
>
Tem como colocar também o número da semana na frente? Pra ficar 46ª - 04/11 até 17/11
Leia o manual sobre DateTime::format();
É possível fazer uma função pra aceitar o número da semana e exibir o período?
Sim, é possível.
>
Por exemplo, tem o ano de 2013, para o esquema de outdoors o dia 31 de dezembro de 2012 faz parte da primeira semana do ano de 2013, pois é contado a partir da segunda.
Tem como adicionar essa data tbm?
Basta alterar os períodos. Tanto inicial como final.
Para o numero da semana, use o caractere "W" (Week - Número do ano da semana ISO-8601, semanas começam na Segunda) na formatação.
Gabriel, eu conseguir fazer o código funcionar do jeito que queria,, Mas infelizmente o meu servidor web não suporta a função DatePeriod, que é só pro PHP 5.3 + e o meu servidor é PHP 5.2.
Pergunta: Não tem como fazer com uma classe que a versão 5.2 suporte não??
Vou ver o que posso fazer a respeito do servidor. mas muito obrigado cara.
Resolvido!
muuuuuuuuuuito mais simples hehe:
$inicio = new DateTime('first monday this week');
$termino = clone $inicio;
$termino->modify('+2 week');
echo $inicio->format('d/m/Y'), ' até ', $termino->format('d/m/Y');
Resultado de hoje (13/11/2013):
11/11/2013 até 25/11/2013
Basta você definir a data inicial e com um laço manda +2 weeks no strtotime a cada volta do laço.