O que você quer dizer com primeiro dia da semana? Você quer dizer Sun, Mon? Ou você quer dizer a data do primeiro dia da semana?
Jeffrey Hines
2
O primeiro dia da semana é constante: é segunda-feira (ou possivelmente domingo). Você quer dizer que deseja obter a data da segunda-feira anterior a uma data arbitrária?
11139 Jon Cram
Qual versão do PHP - 4 ou 5?
11139 Jon Cram
a data do domingo da semana. php 5
Iggy Ma
Estranho, ele está pedindo uma DateTimesolução e a maioria das respostas não a fornece. =)
$ day contém um número de 0 a 6, representando o dia da semana (domingo = 0, segunda-feira = 1, etc.). $ week_start contém a data do domingo da semana atual como mm-dd-aaaa. $ week_end contém a data do sábado da semana atual como mm-dd-aaaa.
this weeknão funciona se você precisa ter sempre o início da semana anterior, mas o comentário de @ LewisBuckley o faz.
Smar
O segundo argumento time()é opcional se você desejar especificar hoje.
Ifnot
não funcionou para mim, eu tive que ver uma sintaxe um pouco diferente para YTD, MTD, WTD.
Ron
6
Esta resposta produz resultados inconsistentes, dependendo da versão do PHP usado: 3v4l.org/Z3k4E de @ LewisBuckley solução é consistente para todas as versões: 3v4l.org/Eeh9c
Descrições relativas como esta semana têm seu próprio contexto. A seguir, é mostrada a saída desta semana de segunda a domingo, quando é segunda ou domingo:
$date ='2015-03-16';// monday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
$date ='2015-03-22';// sunday
echo date("Y-m-d", strtotime('monday this week', strtotime($date))),"\n";
echo date("Y-m-d", strtotime('sunday this week', strtotime($date))),"\n";
por que isso não está funcionando para a data 05/06/2016, está dando datas nas próximas semanas.
1
Obrigado por isso, apenas modifiquei esse código para poder passar um parâmetro opcional de data $ dt = $ custom_date? strtotime ($ custom_date): time (); $ segunda-feira = data ("Ymd", strtotime ('segunda-feira desta semana', $ dt)); $ domingo = data ("Ymd", strtotime ('domingo esta semana', $ dt));
Ron Michael
47
Mantenha simples :
<?php
$dateTime =new \DateTime('2020-04-01');
$monday = clone $dateTime->modify(('Sunday'== $dateTime->format('l'))?'Monday last week':'Monday this week');
$sunday = clone $dateTime->modify('Sunday this week');?>
edit: erro de digitação ou alguma sintaxe desconhecida? de onde vem o \? $dateTime = new \DateTime('2012-05-14');
Sliq
2
Estou fazendo isso para evitar qualquer conflito com um possível objeto carregado automaticamente do seu aplicativo. Isso é como caminho absoluto ou caminho relativo.
job3dot5
9
@ Panique - a "sintaxe desconhecida" é a sintaxe de espaço para nome do PHP 5.3. O namespacing permite prefixar uma classe com um namespace seguido por uma barra invertida. Aqui ele está usando-o sem um espaço para nome para especificar a DateTimeclasse principal , o que significa que o código funcionará mesmo se você tiver outra classe chamada DateTimeno espaço para nome atual.
Spudley 14/05
O nome do dia está sempre em inglês?
Marwelln
1
A parte do clone não está funcionando corretamente. Você deve clonar primeiro e, em seguida, fazer operação no clone, se precisar de um original.
Farid Movsumov 09/09/19
25
$givenday = date("w", mktime(0,0,0, MM, dd, yyyy));
Isso fornece o dia da semana da própria data em que 0= domingo e 6= sábado. A partir daí, você pode simplesmente calcular de volta para o dia que desejar.
Essa resposta retorna se uma determinada data é domingo ou segunda-feira etc. Mas, o questionador solicitou a data do domingo da semana da data especificada, conforme mencionado em seu comentário na pergunta original.
Rakib
19
Esta pergunta precisa de uma boa resposta DateTime : -
function firstDayOfWeek($date){
$day =DateTime::createFromFormat('m-d-Y', $date);
$day->setISODate((int)$day->format('o'),(int)$day->format('W'),1);return $day->format('m-d-Y');}
var_dump(firstDayOfWeek('06-13-2013'));
Resultado:-
string'06-10-2013'(length=10)
Isso vai lidar com os limites do ano e os anos bissextos.
EDIT: o link abaixo não está mais em execução na versão do PHP declarada. Está sendo executado no PHP 5.6, o que melhora a confiabilidade do strtotime, mas não é perfeito! Os resultados na tabela são resultados ao vivo do PHP 5.6.
Pelo que vale, aqui está um detalhamento do comportamento instável do strtotime ao determinar um quadro de referência consistente:
Basicamente, apenas essas seqüências fornecerão a mesma data de maneira confiável, independentemente do dia da semana em que você estiver no momento em que as ligar:
O artigo também forneceu um código específico para usar: $ start_of_week = strtotime ("próxima segunda-feira - 1 semana"); // retornará segunda-feira da semana atual a partir das 00:00:00 "$ end_of_week = strtotime (" próxima segunda-feira - 1 segundo "); // retornará domingo da semana atual que termina às 23:59:59"
Scott M. Stolz
11
O código a seguir deve funcionar com qualquer data personalizada, apenas usa o formato de data desejado.
Vale ressaltar que isso sempre retornará na segunda-feira anterior; portanto, se $ custom_date for segunda-feira, retornará a data da segunda-feira uma semana antes.
precisa saber é o seguinte
2
Não funciona corretamente, hoje é domingo, os resultados são: Início: 09-09-2013 Fim: 22-09-2013
user2019515
10
Assumindo segunda-feira como o primeiro dia da semana, isso funciona:
"MM-dd-aaaa" não é o mesmo que "Ymd", adapte sua resposta às especificidades da pergunta.
Yevgeniy Afanasyev
1
date ("MM-dd-aaaa") gera a data como: NovNov-0202-15151515. Espero que deve ser: date ( "MDA") que gera uma data legível como: Nov-02-15
Shasi kanth
"MM-dd-aaaa" vem da pergunta. Se você não tiver certeza do que isso significa - pergunte em um comentário à pergunta. Obrigado por modificar sua resposta.
Na segunda-feira passada, você receberá a segunda-feira anterior.
Ikke
8
É isso que estou usando para obter o primeiro e o último dia da semana a partir de qualquer data . Neste caso, segunda-feira é o primeiro dia da semana ...
$date = date('Y-m-d')// you can put any date you want
$nbDay = date('N', strtotime($date));
$monday =newDateTime($date);
$sunday =newDateTime($date);
$monday->modify('-'.($nbDay-1).' days');
$sunday->modify('+'.(7-$nbDay).' days');
Você precisa chegar na próxima segunda-feira primeiro e depois na "segunda-feira" da próxima segunda-feira. Portanto, se a data especificada for segunda-feira, ela retornará a mesma data não na semana passada segunda-feira.
O que torna isso preferível a esta resposta ou a esta resposta ? Parece-me que há mais do que bastante opções nas outras 30 respostas ...
Mogsdad
THX. Esta é uma solução simples e funciona como um encanto.
precisa saber é o seguinte
2
Uma maneira inteligente de fazer isso é permitir que o PHP lide com diferenças de fuso horário e horário de verão (DST). Deixe-me mostrar como fazer isso.
Esta função irá gerar todos os dias de segunda a sexta-feira, inclusive (útil para gerar dias úteis da semana):
Isso retornará às vezes de segunda a sexta-feira da semana atual. Para fazer o mesmo em uma data arbitrária, passe uma data como parâmetro para DateTimeUtilities ::getPeriodFromMondayUntilFriday, assim:
<?php
/* PHP 5.3.0 */
date_default_timezone_set('America/Denver');//Set apprpriate timezone
$start_date = strtotime('2009-12-15');//Set start date//Today's date if $start_date is a Sunday, otherwise date of previous Sunday
$today_or_previous_sunday = mktime(0,0,0, date('m', $start_date), date('d', $start_date), date('Y', $start_date))-((date("w", $start_date)==0)?0:(86400* date("w", $start_date)));//prints 12-13-2009 (month-day-year)
echo date('m-d-Y', $today_or_previous_sunday);?>
(Nota: MM, dd e aaaa na pergunta não são sintaxe de formato de data php padrão - não sei ao certo o que significa, então defino $ start_date com ISO ano-mês-dia)
A maneira mais fácil de obter o primeiro dia (segunda-feira) da semana atual é:
strtotime("next Monday")-604800;
onde 604800 - é a contagem de segundos em 1 semana (60 * 60 * 24 * 7).
Este código é exibido na próxima segunda-feira e diminui por 1 semana. Esse código funcionará bem em qualquer dia da semana. Mesmo que hoje seja segunda-feira.
Útil quando temos segunda-feira como o primeiro dia da semana (seg-dom).
Kamran Mushtaq
0
Eu me deparei com essa questão algumas vezes e sempre surpreendi que as funções de data não tornem isso mais fácil ou mais claro. Aqui está minha solução para PHP5 que usa a DateTimeclasse:
/**
* @param DateTime $date A given date
* @param int $firstDay 0-6, Sun-Sat respectively
* @return DateTime
*/function getFirstDayOfWeek(DateTime $date, $firstDay =0){
$offset =7- $firstDay;
$ret = clone $date;
$ret->modify(-(($date->format('w')+ $offset)%7).'days');return $ret;}
É necessário clonar para evitar alterar a data original.
$date ="2013-03-18";
$searchRow = date("d.m.Y", strtotime('last monday',strtotime($date." + 1 day")));
echo "for date ".$date ." we get this monday: ";echo $searchRow; echo '<br>';
Não é a melhor maneira, mas eu testei e, se eu estiver nesta semana, recebo a segunda-feira correta, e se estiver em uma segunda-feira, receberei essa segunda-feira.
DateTime
solução e a maioria das respostas não a fornece. =)Respostas:
Aqui está o que estou usando ...
$ day contém um número de 0 a 6, representando o dia da semana (domingo = 0, segunda-feira = 1, etc.).
$ week_start contém a data do domingo da semana atual como mm-dd-aaaa.
$ week_end contém a data do sábado da semana atual como mm-dd-aaaa.
fonte
Substitua a hora (). Os métodos do próximo domingo / segunda-feira não funcionarão quando o dia atual for domingo / segunda-feira.
fonte
$monday = strtotime('last monday', strtotime('tomorrow'));
this week
não funciona se você precisa ter sempre o início da semana anterior, mas o comentário de @ LewisBuckley o faz.time()
é opcional se você desejar especificar hoje.strtotime
Função muito simples de usar :Difere um pouco entre as versões do PHP :
Saída para 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Saída para 4.3.5 - 5.2.17
Saída para 4.3.0 - 4.3.4
Comparando em casos de borda
Descrições relativas como esta semana têm seu próprio contexto. A seguir, é mostrada a saída desta semana de segunda a domingo, quando é segunda ou domingo:
No entanto, difere um pouco nas versões do PHP :
Saída para 5.3.0 - 5.6.6, php7 @ 20140507 - 20150301, hhvm-3.3.1 - 3.5.1
Saída para 4.3.5 - 5.0.5, 5.2.0 - 5.2.17
Saída para 5.1.0 - 5.1.6
Saída para 4.3.0 - 4.3.4
fonte
Mantenha simples :
Fonte: Manual do PHP
Nota: como algum usuário comentou, o valor $ dateTime será modificado.
fonte
$dateTime = new \DateTime('2012-05-14');
DateTime
classe principal , o que significa que o código funcionará mesmo se você tiver outra classe chamadaDateTime
no espaço para nome atual.Isso fornece o dia da semana da própria data em que
0
= domingo e6
= sábado. A partir daí, você pode simplesmente calcular de volta para o dia que desejar.fonte
Esta pergunta precisa de uma boa resposta DateTime : -
Resultado:-
Isso vai lidar com os limites do ano e os anos bissextos.
fonte
EDIT: o link abaixo não está mais em execução na versão do PHP declarada. Está sendo executado no PHP 5.6, o que melhora a confiabilidade do strtotime, mas não é perfeito! Os resultados na tabela são resultados ao vivo do PHP 5.6.
Pelo que vale, aqui está um detalhamento do comportamento instável do strtotime ao determinar um quadro de referência consistente:
http://gamereplays.org/reference/strtotime.php
Basicamente, apenas essas seqüências fornecerão a mesma data de maneira confiável, independentemente do dia da semana em que você estiver no momento em que as ligar:
fonte
O código a seguir deve funcionar com qualquer data personalizada, apenas usa o formato de data desejado.
Testei o código com o PHP 5.2.17 Resultados:
fonte
Assumindo segunda-feira como o primeiro dia da semana, isso funciona:
fonte
Que tal agora?
fonte
É isso que estou usando para obter o primeiro e o último dia da semana a partir de qualquer data . Neste caso, segunda-feira é o primeiro dia da semana ...
fonte
Aqui estou considerando o domingo como o primeiro e o sábado como o último dia da semana.
Resultado :
Início: 05-08-2012
Fim: 08-08-2012
fonte
Que tal agora?
fonte
Tente o seguinte:
(a partir deste tópico do fórum )
fonte
Esta é a solução mais curta e legível que encontrei:
strtotime
é mais rápido quenew DateTime()->getTimestamp()
.fonte
Apenas use
date($format, strtotime($date,' LAST SUNDAY + 1 DAY'));
fonte
A função seguinte da versão pré 5.3 do PHP fornece o primeiro dia da semana de uma determinada data (neste caso - domingo, 2013-02-03):
fonte
fonte
Você precisa chegar na próxima segunda-feira primeiro e depois na "segunda-feira" da próxima segunda-feira. Portanto, se a data especificada for segunda-feira, ela retornará a mesma data não na semana passada segunda-feira.
fonte
Se você deseja segunda-feira como o início de sua semana, faça o seguinte:
fonte
Uma maneira inteligente de fazer isso é permitir que o PHP lide com diferenças de fuso horário e horário de verão (DST). Deixe-me mostrar como fazer isso.
Esta função irá gerar todos os dias de segunda a sexta-feira, inclusive (útil para gerar dias úteis da semana):
Isso retornará às vezes de segunda a sexta-feira da semana atual. Para fazer o mesmo em uma data arbitrária, passe uma data como parâmetro para
DateTimeUtilities ::getPeriodFromMondayUntilFriday
, assim:Interessado apenas na segunda-feira, como o OP pediu?
fonte
Você analisa a data usando
strptime()
e usandodate()
no resultado:fonte
(Nota: MM, dd e aaaa na pergunta não são sintaxe de formato de data php padrão - não sei ao certo o que significa, então defino $ start_date com ISO ano-mês-dia)
fonte
Outra maneira de fazer isso ....
fonte
A maneira mais fácil de obter o primeiro dia (segunda-feira) da semana atual é:
onde 604800 - é a contagem de segundos em 1 semana (60 * 60 * 24 * 7).
Este código é exibido na próxima segunda-feira e diminui por 1 semana. Esse código funcionará bem em qualquer dia da semana. Mesmo que hoje seja segunda-feira.
fonte
Achei isso bastante frustrante, considerando que meu fuso horário é australiano e que
strtotime()
odeia datas no Reino Unido.Se o dia atual for um domingo,
strtotime("monday this week")
retornará no dia seguinte.Para superar isso:
fonte
Aqui está um exemplo para o primeiro dia da semana passada e o último dia da semana passada como um
DateTime
objeto.fonte
fonte
Eu me deparei com essa questão algumas vezes e sempre surpreendi que as funções de data não tornem isso mais fácil ou mais claro. Aqui está minha solução para PHP5 que usa a
DateTime
classe:É necessário clonar para evitar alterar a data original.
fonte
A respeito:
Não é a melhor maneira, mas eu testei e, se eu estiver nesta semana, recebo a segunda-feira correta, e se estiver em uma segunda-feira, receberei essa segunda-feira.
fonte