Я можу отримати понеділок цього тижня за допомогою:
$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"));
Це все
У 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')))));
last day of {$month} {$year}або last day of this monthобидва працюють. Але майте на увазі, що $ month має бути рядком, що містить назву місяця, наприклад, "січень" весь шлях, який вважається "Decemember". Або ви могли просто використовувати date('Y-m-t');.
Я використовую це за допомогою щоденної роботи з клоном, щоб перевірити, чи варто мені надсилати електронний лист у перший день будь-якого місяця своїм філіям. Це на кілька більше рядків, ніж інші відповіді, але твердий, як скеля.
//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, і конкретні дати, які його реалізують.
Код у вашому конкретному випадку виглядає так:
(new TheFirstDayOfThisMonth(new Now()))->value();
Щоб дізнатися більше про цей підхід, подивіться цей запис .