The Текущий Дата
У меня есть деятельность, которая проводится только в диапазоне дат независимо месяц /год. Мне нужно проверить, соответствует ли текущая дата> = 30 и < = 05 (в следующем месяце).
текущий дата не может быть в следующем месяце по определению. Так что если вы хотите, чтобы проверить, если текущая дата находится между 1 ст и 5-го или больше, чем 30-го , вы можете просто принести на следующий день с $day = $datetime->format('j')
и проверить, если $day <= 5
или $day >= 30
.
Чтобы построить объект DateTime
с текущей датой , просто вызовите конструктор без аргументов. Пример:
function validate($format = 'now') {
$now = new DateTime($format);
$day = $now->format('j');
return ($day >= 30 || $day <= 5);
}
Тестирование
// Create DateTime object for the first day of the current month
$d = new DateTime('first day of');
$day_to = (new DateTime())->format('j');
for ($i = 0; $i < $day_to; $i++) {
printf("%d: %d\n", $i + 1, validate('@' . $d->getTimestamp() . " + $i days"));
}
Выход
1: 1
2: 1
3: 1
4: 1
5: 1
6: 0
7: 0
...
27: 0
28: 0
29: 0
30: 1
31: 1
Произвольное Дата
Если вы хотите проверить, если дата попадает в диапазон дат, используйте сравнение ope на объектах DateTime
.
В вашем конкретном случае, вы можете построить два DateTime
объекты для диапазона и сравнить их с любого DateTime
объекта, как показано в следующем примере:
$d = new DateTime('2017-02-01 20:15');
// 5th day of the next month
$rhd = new DateTime('first day of next month');
$rhd->modify('+4 day');
$rhd->setTime(0, 0, 0);
// 30th day of the current month
$lhd = new DateTime('first day of');
$lhd->modify('+29 day');
$lhd->setTime(0, 0, 0);
printf(
"%s %s between\n%s and\n%s\n",
$d->format('r'),
($d >= $lhd && $d <= $rhd) ? 'is' : 'is not',
$lhd->format('r'),
$rhd->format('r')
);
Вы должны использовать ' 'j'' формат спецификатора вместо '' d'':' $ day = $ d-> format ('j'); '. Нет необходимости в строковых манипуляциях. –
Вам не нужно «microtime» для создания объекта DateTime для текущей даты/времени. Просто вызовите конструктор без аргументов: '$ d = new DateTime();' –