Первый день текущего месяца в php с использованием date_modify в качестве объекта DateTime - PullRequest
140 голосов
/ 19 января 2010

Я могу получить понедельник этой недели с:

$monday = date_create()->modify('this Monday');

Я бы хотел с той же легкостью получить 1-е число этого месяца. Как мне этого добиться?

Ответы [ 10 ]

295 голосов
/ 23 февраля 2012

Вот что я использую.

Первый день месяца:

date('Y-m-01');

Последний день месяца:

date('Y-m-t');
226 голосов
/ 19 января 2010

Требуется 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
29 голосов
/ 20 ноября 2012

Это все, что вам нужно:

$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/>';
19 голосов
/ 04 июля 2012

В настоящее время я использую это решение:

$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');
16 голосов
/ 18 июля 2014

Я использую сумасшедший способ сделать это с помощью этой команды

$firstDay=date('Y-m-d',strtotime("first day of this month"));
$lastDay=date('Y-m-d',strtotime("last day of this month"));

Вот и все

5 голосов
/ 20 января 2010

В php 5.2 вы можете использовать:

<? $d = date_create();
print date_create($d->format('Y-m-1'))->format('Y-m-d') ?>
3 голосов
/ 19 января 2010

Безобразно, (и не использует ваш вызов метода выше), но работает:

echo 'First day of the month: ' . date('m/d/y h:i a',(strtotime('this month',strtotime(date('m/01/y')))));   
2 голосов
/ 19 января 2010

Вы можете сделать это так:

$firstday = date_create()->modify('first day January 2010');
0 голосов
/ 13 февраля 2019

Я использую это для ежедневной работы 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;

}
0 голосов
/ 20 июля 2017

используя метод даты, мы сможем получить результат. то есть; дата ('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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...