Первый день текущего месяца в php с использованием изменения даты в качестве объекта DateTime
Я могу получить понедельник на этой неделе с помощью:
$monday = date_create()->modify('this Monday');
Я хотел бы с такой же легкостью получить 1-е число этого месяца. Как я могу этого добиться?
Спасибо
9 answers
Для работы требуется PHP 5.3 ("первый день" введен в PHP 5.3). В противном случае приведенный выше пример является единственным способом сделать это:
<?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');
В PHP 5.4+ вы можете сделать это:
<?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');
Если вы предпочитаете лаконичный способ сделать это, и у вас уже есть год и месяц в числовых значениях, вы можете использовать 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
Вот что я использую.
Первый день месяца:
date('Y-m-01');
Последний день месяца:
date('Y-m-t');
Это все, что вам нужно:
$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/>';
В настоящее время я использую это решение:
$firstDay = new \DateTime('first day of this month');
$lastDay = new \DateTime('last day of this month');
Единственная проблема, с которой я столкнулся, заключается в том, что устанавливается странное время. Мне нужен был правильный диапазон для нашего поискового интерфейса, и в итоге я получил следующее:
$firstDay = new \DateTime('first day of this month 00:00:00');
$lastDay = new \DateTime('first day of next month 00:00:00');
Я использую сумасшедший способ сделать это с помощью этой команды
$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));
Вот и все
В php 5.2 вы можете использовать:
<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>
Уродливый (и не использует ваш вызов метода выше), но работает:
echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));
Вы можете сделать это так:
$firstday = date_create()->modify('first day January 2010');
Используя метод даты, мы должны быть в состоянии получить результат. т.е.; дата ('N/D/l', mktime(0, 0, 0, месяц, день, год));
Например
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