Я могу получить понедельник этой недели с:
$monday = date_create()->modify('this Monday');
Я хотел бы получить с той же легкостью 1-го числа этого месяца. Как я могу этого достичь?
Я могу получить понедельник этой недели с:
$monday = date_create()->modify('this Monday');
Я хотел бы получить с той же легкостью 1-го числа этого месяца. Как я могу этого достичь?
Ответы:
Требуется 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
->modify()
если вы просто хотите первый день текущего месяца . Вы можете передать 'first day of this month'
конструктору DateTime прямо как: $date = new DateTime('first day of this month')
. Просто говорю ...
Вот что я использую.
Первый день месяца:
date('Y-m-01');
Последний день месяца:
date('Y-m-t');
date('Y-m-t');
.
date('w', '2015-05-01');
я получу день раньше, а не фактический день. (Это даст мне 4 вместо правильных 5).
$monthStart = date('Y-m-01 00:00:00'); $monthEnd = date('Y-m-t 23:59:59');
Это все, что вам нужно:
$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())
вернется первый день, а время совпадает с текущим. Так что, это не первый день в 0:00, его первый день и, как сейчас, время. Это исправляет это strtotime('first day of this month 00:00:00', time())
.
В настоящее время я использую это решение:
$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"));
Вот и все
Уродливо, (и не использует ваш вызов метода выше), но работает:
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}
или last day of this month
оба работают. Но имейте в виду, что $ month должен быть строкой, содержащей название месяца, например «Январь», вплоть до «Decemember». Или вы могли бы просто использовать date('Y-m-t');
.
Я использую это для ежедневной работы cron, чтобы проверить, должен ли я отправлять электронное письмо в первый день каждого месяца моим партнерам. Это несколько больше строк, чем другие ответы, но твердый, как скала.
//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;
}
используя метод даты, мы должны быть в состоянии получить результат. то есть; дата ('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
Все эти специальные выражения PHP, в духе first day of ...
великолепны, хотя они выходят из головы снова и снова.
Поэтому я решил создать пару базовых абстракций даты и времени и множество конкретных реализаций, которые автоматически выполняются любой IDE. Дело в том, чтобы найти что-то вроде вещей. Как, today
, now
, the first day of a previous month
и т.д. Все эти вещи я перечислил являются DateTimes. Следовательно, существует интерфейс или абстрактный классISO8601DateTime
, и конкретные datetime, которые его реализуют.
Код в вашем конкретном случае выглядит так:
(new TheFirstDayOfThisMonth(new Now()))->value();
Чтобы узнать больше об этом подходе, взгляните на эту запись .