Estou com um problema, John Conde respondeu à pergunta que respondi, mas esqueço de mencionar que ele precisa funcionar no 5.2, por isso vou usar a resposta do Mr-sk ...
pihentagy
Respostas:
260
Requer o PHP 5.3 para funcionar ("primeiro dia de" é introduzido no PHP 5.3). Caso contrário, o exemplo acima é a única maneira de fazer isso:
<?php
// First day of this month
$d =newDateTime('first day of this month');
echo $d->format('jS, F Y');// First day of a specific month
$d =newDateTime('2010-01-19');
$d->modify('first day of this month');
echo $d->format('jS, F Y');// alternatively...
echo date_create('2010-01-19')->modify('first day of this month')->format('jS, F Y');
No PHP 5.4+, você pode fazer o seguinte:
<?php
// First day of this month
echo (newDateTime('first day of this month'))->format('jS, F Y');
echo (newDateTime('2010-01-19'))->modify('first day of this month')->format('jS, F Y');
Se você preferir uma maneira concisa de fazer isso, e já tiver o ano e o mês em valores numéricos, poderá usar date():
<?php
echo date('Y-m-01');// first day of this month
echo date("$year-$month-01");// first day of a month chosen by you
Observe que você não precisa passar ->modify()se quiser apenas o primeiro dia do mês atual . Você pode passar 'first day of this month'para o construtor DateTime diretamente como: $date = new DateTime('first day of this month'). Só
Essa é a IMO, de longe, a maneira mais simples e legível de resolver isso, se tudo o que você precisa é uma representação em seqüência da data.
Markus Amalthea Magnuson
5
Último dia do mês, em seguida, pode ser agarrado usando date('Y-m-t');.
precisa
7
FYI: A data 't' ('Ym-t') sempre representa o número de dias naquele mesmo mês. Uma maneira excelente e simples de obter o último dia do mês atual.
Pascal Klein
1
Se eu usar isso para tentar obter o dia da semana date('w', '2015-05-01');, terminarei com o dia anterior em vez do dia real. (Isso me daria 4 em vez dos 5 corretos).
PBwebD 15/05
5
Isso é simplesmente brilhante. I expandiu-lo um pouco para dar o mínimo e limites máximos para o tempo no mês fazendo: $monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
H2ONOCK
32
Isso é tudo que você precisa:
$week_start = strtotime('last Sunday', time());
$week_end = strtotime('next Sunday', time());
$month_start = strtotime('first day of this month', time());
$month_end = strtotime('last day of this month', time());
$year_start = strtotime('first day of January', time());
$year_end = strtotime('last day of December', time());
echo date('D, M jS Y', $week_start).'<br/>';
echo date('D, M jS Y', $week_end).'<br/>';
echo date('D, M jS Y', $month_start).'<br/>';
echo date('D, M jS Y', $month_end).'<br/>';
echo date('D, M jS Y', $year_start).'<br/>';
echo date('D, M jS Y', $year_end).'<br/>';
Esta é uma solução elegante, no entanto strtotime('first day of this month', time()), retornará no primeiro dia e o horário é o mesmo que o atual. Portanto, não é o primeiro dia às 0:00, é o primeiro dia e como a hora é agora. Isso corrige isso strtotime('first day of this month 00:00:00', time()).
Kalle H. Väravas 01/09/14
22
Atualmente estou usando esta solução:
$firstDay =new \DateTime('first day of this month');
$lastDay =new \DateTime('last day of this month');
A única questão que me deparei é que está sendo definido um tempo estranho. Eu precisava do intervalo correto para nossa interface de pesquisa e acabei com isso:
$firstDay =new \DateTime('first day of this month 00:00:00');
$lastDay =new \DateTime('first day of next month 00:00:00');
Isso é legal, mas estou tendo alguns problemas no primeiro dia do mês. Então, se hoje é 1º de setembro, 11h. Eu vou chegar em 1º de agosto! Preciso verificar se é o "1º" hoje e, se for o caso, use "agora". estranho (Php 7.3.9)
Jacob Christensen
@JacobChristensen ainda não experimentou isso. Como você consertou isso?
Nikola Petkanski 8/10/19
Muito verdadeiro, o php parece não ser muito legal sobre este Primeiro e último. $ n = new \ DateTime ('primeiro dia de'. (new \ DateTime ()) -> formato ('F')); "primeiro dia de janeiro". O mesmo acontece na semana em que é segunda-feira e é um pouco ... frustrante :)
Jacob Christensen
20
Eu uso uma maneira louca de fazer isso é usando este comando
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
fora do tópico, mas como você calcularia o último dia do mês no mesmo cenário.
LoneWOLFs
@LoneWOLFs last day of {$month} {$year}ou last day of this monthambos funcionam. Mas lembre-se de que $ month precisaria ser uma string que contenha o nome do mês como "janeiro" até o momento "dezembro". Ou você pode simplesmente usar date('Y-m-t');.
Mark Tomlin
3
Você pode fazer assim:
$firstday = date_create()->modify('first day January 2010');
Eu uso isso com uma tarefa cron diária para verificar se devo enviar um email no primeiro dia de um mês para meus afiliados. São mais algumas linhas do que as outras respostas, mas sólidas como uma rocha.
//is this the first day of the month?
$date = date('Y-m-d');
$pieces = explode("-", $date);
$day = $pieces[2];//if it's not the first day then stopif($day !="01"){
echo "error - it's not the first of the month today";exit;}
usando o método date, poderemos obter o resultado. ie; data ('N / D / l', mktime (0, 0, 0, mês, dia, ano));
Por exemplo
echo date('N', mktime(0,0,0,7,1,2017));// will return 6
echo date('D', mktime(0,0,0,7,1,2017));// will return Sat
echo date('l', mktime(0,0,0,7,1,2017));// will return Saturday
Todas essas expressões especiais de php, no espírito de, first day of ...são ótimas, embora elas saiam da minha cabeça uma e outra vez.
Então, decidi criar algumas abstrações básicas de data e hora e toneladas de implementação específica que são concluídas automaticamente por qualquer IDE. O objetivo é encontrar o tipo de coisas. Como, today, now, the first day of a previous month, etc. Todas essas coisas que eu listei são datetimes. Portanto, há uma interface ou classe abstrata chamada ISO8601DateTimee datas específicas que a implementam.
O código no seu caso específico é assim:
(newTheFirstDayOfThisMonth(newNow()))->value();
Para saber mais sobre essa abordagem, consulte esta entrada .
Respostas:
Requer o PHP 5.3 para funcionar ("primeiro dia de" é introduzido no PHP 5.3). Caso contrário, o exemplo acima é a única maneira de fazer isso:
No PHP 5.4+, você pode fazer o seguinte:
Se você preferir uma maneira concisa de fazer isso, e já tiver o ano e o mês em valores numéricos, poderá usar
date()
:fonte
->modify()
se quiser apenas o primeiro dia do mês atual . Você pode passar'first day of this month'
para o construtor DateTime diretamente como:$date = new DateTime('first day of this month')
. SóAqui está o que eu uso.
Primeiro dia do mês:
Último dia do mês:
fonte
date('Y-m-t');
.date('w', '2015-05-01');
, terminarei com o dia anterior em vez do dia real. (Isso me daria 4 em vez dos 5 corretos).$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Isso é tudo que você precisa:
fonte
strtotime('first day of this month', time())
, retornará no primeiro dia e o horário é o mesmo que o atual. Portanto, não é o primeiro dia às 0:00, é o primeiro dia e como a hora é agora. Isso corrige issostrtotime('first day of this month 00:00:00', time())
.Atualmente estou usando esta solução:
A única questão que me deparei é que está sendo definido um tempo estranho. Eu precisava do intervalo correto para nossa interface de pesquisa e acabei com isso:
fonte
Eu uso uma maneira louca de fazer isso é usando este comando
Isso é tudo
fonte
No php 5.2, você pode usar:
fonte
Feio (e não usa sua chamada de método acima), mas funciona:
fonte
last day of {$month} {$year}
oulast day of this month
ambos funcionam. Mas lembre-se de que $ month precisaria ser uma string que contenha o nome do mês como "janeiro" até o momento "dezembro". Ou você pode simplesmente usardate('Y-m-t');
.Você pode fazer assim:
fonte
Eu uso isso com uma tarefa cron diária para verificar se devo enviar um email no primeiro dia de um mês para meus afiliados. São mais algumas linhas do que as outras respostas, mas sólidas como uma rocha.
fonte
usando o método date, poderemos obter o resultado. ie; data ('N / D / l', mktime (0, 0, 0, mês, dia, ano));
Por exemplo
fonte
Todas essas expressões especiais de php, no espírito de,
first day of ...
são ótimas, embora elas saiam da minha cabeça uma e outra vez.Então, decidi criar algumas abstrações básicas de data e hora e toneladas de implementação específica que são concluídas automaticamente por qualquer IDE. O objetivo é encontrar o tipo de coisas. Como,
today
,now
,the first day of a previous month
, etc. Todas essas coisas que eu listei são datetimes. Portanto, há uma interface ou classe abstrata chamadaISO8601DateTime
e datas específicas que a implementam.O código no seu caso específico é assim:
Para saber mais sobre essa abordagem, consulte esta entrada .
fonte