Posso receber a segunda-feira desta semana com:
$monday = date_create()->modify('this Monday');
Gostaria de obter com a mesma facilidade o primeiro deste mês. Como posso conseguir isso?
Posso receber a segunda-feira desta semana com:
$monday = date_create()->modify('this Monday');
Gostaria de obter com a mesma facilidade o primeiro deste mês. Como posso conseguir isso?
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:
<?php
// First day of this month
$d = new DateTime('first day of this month');
echo $d->format('jS, F Y');
// First day of a specific month
$d = new DateTime('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 (new DateTime('first day of this month'))->format('jS, F Y');
echo (new DateTime('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
->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:
date('Y-m-01');
Último dia do mês:
date('Y-m-t');
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:
$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/>';
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())
.
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');
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"));
Isso é tudo
Feio (e não usa sua chamada de método acima), mas funciona:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
last day of {$month} {$year}
ou last 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 usar date('Y-m-t');
.
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 stop
if($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 ISO8601DateTime
e datas específicas que a implementam.
O código no seu caso específico é assim:
(new TheFirstDayOfThisMonth(new Now()))->value();
Para saber mais sobre essa abordagem, consulte esta entrada .