PHP Как лучше сравнить две даты?
Как в php из этой строки создать дату чтобы можно было сравнить (больше или меньше) с другой датой ?
- Вопрос задан более трёх лет назад
- 4999 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 2
$date1 = strtotime($row['date1']); $date2 = strtotime($row['date2']); if ($date1 > $date2) < .
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
SharuPoNemnogu @SharuPoNemnogu
не язык плохой, программисты такие.
выбирай. Описание есть в доке
echo date('Y.m.d H.i.s', strtotime('Aug 24 2016 7:41PM')); $date = new \DateTime('Aug 24 2016 7:41PM'); echo $date->format('Y.m.d H.i.s');
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
LessThanOrEqual
Валидирует, что значение меньше чем или равно другому значению, определённому в опциях. Чтобы гарантировать, что значение меньще, чем другое, см. LessThan.
Базовое применение
Следующие ограничения гарантируют, что:
- количество siblings в Person меньше, или равно 5
- age меньше, или равно 80
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Person < #[Assert\LessThanOrEqual(5)] protected $siblings; #[Assert\LessThanOrEqual( value: 80, )] protected $age; >
1 2 3 4 5 6 7 8
# config/validator/validation.yaml App\Entity\Person: properties: siblings: - LessThanOrEqual: 5 age: - LessThanOrEqual: value: 80
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> class name="App\Entity\Person"> property name="siblings"> constraint name="LessThanOrEqual"> 5 constraint> property> property name="age"> constraint name="LessThanOrEqual"> option name="value">80 option> constraint> property> class> constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Mapping\ClassMetadata; class Person < public static function loadValidatorMetadata(ClassMetadata $metadata) < $metadata->addPropertyConstraint('siblings', new Assert\LessThanOrEqual(5)); $metadata->addPropertyConstraint('age', new Assert\LessThanOrEqual([ 'value' => 80, ])); > >
Сравнение дат
Это ограничение может быть использовано, чтобы сравнивать объекты DateTime с любой строкой даты, принятой конструктором DateTime. Например, вы можете проверить, чтобы дата была сегодняшней или прошедшей таким образм:
1 2 3 4 5 6 7 8 9 10
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Person < #[Assert\LessThanOrEqual('today')] protected $dateOfBirth; >
1 2 3 4 5
# config/validator/validation.yaml App\Entity\Person: properties: dateOfBirth: - LessThanOrEqual: today
1 2 3 4 5 6 7 8 9 10 11 12
constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> class name="App\Entity\Person"> property name="dateOfBirth"> constraint name="LessThanOrEqual">today constraint> property> class> constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Mapping\ClassMetadata; class Person < public static function loadValidatorMetadata(ClassMetadata $metadata) < $metadata->addPropertyConstraint('dateOfBirth', new Assert\LessThanOrEqual('today')); > >
Помните, что PHP будет использовать часовой пояс, сконфигурированный сервером, чтобы интерпретировать эти даты. Если вы хотите изменить часовой пояс, добавьте его в начале строки даты:
1 2 3 4 5 6 7 8 9 10 11 12 13
// src/Entity/Event.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Event < #[Assert\Range( min: 'первый день января UTC', max: 'первый день января следующего года UTC', )] protected $startDate; >
1 2 3 4 5 6 7
# config/validator/validation.yaml App\Entity\Event: properties: startDate: - Range: min: первый день января UTC max: первый день января следующего года UTC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> class name="App\Entity\Event"> property name="startDate"> constraint name="Range"> option name="min">первый день января UTC option> option name="max">первый день января следующего года UTC option> constraint> property> class> constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Mapping\ClassMetadata; class Event < public static function loadValidatorMetadata(ClassMetadata $metadata) < $metadata->addPropertyConstraint('startDate', new Assert\Range([ 'min' => 'первый день января UTC', 'max' => 'первый день января следующего года UTC', ])); > >
Класс DateTime также принимает относительные даты и время. Например, вы можете проверить, чтобы возраст человека был как минимум 18 лет, таким образом:
1 2 3 4 5 6 7 8 9 10
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; class Person < #[Assert\LessThan('-18 years')] protected $dateOfBirth; >
1 2 3 4 5
# config/validator/validation.yaml App\Entity\Person: properties: dateOfBirth: - LessThan: -18 years
1 2 3 4 5 6 7 8 9 10 11 12
constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping https://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> class name="App\Entity\Person"> property name="dateOfBirth"> constraint name="LessThan">-18 years constraint> property> class> constraint-mapping>
1 2 3 4 5 6 7 8 9 10 11 12 13
// src/Entity/Person.php namespace App\Entity; use Symfony\Component\Validator\Constraints as Assert; use Symfony\Component\Validator\Mapping\ClassMetadata; class Person < public static function loadValidatorMetadata(ClassMetadata $metadata) < $metadata->addPropertyConstraint('dateOfBirth', new Assert\LessThan('-18 years')); > >
Опции
value
тип: mixed [опция по умолчанию ]
Эта опция обязательна. Она определяет значеие для сравнения. Это может быть строка, число или объект.
message
тип: string по умолчанию: Это значение должно быть меньше, или равно >.
Это сообщение будет отображено, если значение не меньше или равно сраниваемому значению.
Вы можете использовать следующие параметры в этом сообщении:
payload
тип: mixed по умолчанию: null
Эта опция может быть использована, чтобы добавить к ограничению произвольные данные, относящиеся к домену. Сконфигурированная нагрузка не используется компонентом Валидатор, но его обработка полностью зависит от вас.
Например, вы можете захотеть исользовать несколько уровней ошибок, чтобы представить неудачные ограничения в фронт-энде по-разному, в зависимости от степени сложности ошибки.
propertyPath
тип: string
Определяет свойство объекта, значение которого используется, чтобы провести сравнение.
Например, если вы хотите сравнить свойство $endDate некоторого объекта касательно свойства $startDate того же объекта, используйте propertyPath="startDate" в ограничении сравнения $endDate .
value
тип: mixed [опция по умолчанию ]
Эта опция обязательна. Она определяет значеие для сравнения. Это может быть строка, число или объект.
Symfony is a trademark of Symfony SAS. Переклад - Playtini. UA RU RU EN
Smarty Icon
You may use the Smarty logo according to the trademark notice.
For sponsorship, advertising, news or other inquiries, contact us at:
Sites Using Smarty
Advertisement
| Даты | ||
|---|---|---|
| Prev | Chapter 18. Советы | Next |
Даты
Обычно даты в Smarty всегда передаются как временные метки (англ. timestamp), что позволяет проектировщикам шаблонов использовать date_format для полного контроля над форматированием даты и также делает легким сравнение дат там, где это необходимо.
Note
Начиная с версии Smarty 1.4.0, вы можете передавать даты в Smarty в виде меток времени Unix (unix timestamps), mysql, или в любом другом виде, который понимает функция strtotime().
Example 18.4. Использование date_format
Jan 4, 2009
2009/01/04
Даты можно ставнивать в шаблонах путем сравнения меток времени следующим образом:
. делаем что-то полезное .
Example 18.5. Преобразование элементов формы ввода даты назад к временной метке
if(empty($month)) < $month = strftime('%m'); >if(empty($day)) < $day = strftime('%d'); >return mktime(0, 0, 0, $month, $day, $year); > ?>
| Prev | Up | Next |
| Присвоение переменной заголовка (title) шаблону-шапке | Home | WAP/WML |
CompareDates
Сравнивает между собой две даты. Возвращаемые значения:
| Условие | Возвращаемое значение |
|---|---|
| date1 > date2 | 1 |
| date1 < date2 | -1 |
| date1 = date2 | 0 |
Параметры
| Параметр | Описание |
|---|---|
| date1 | Первая дата для сравнения. |
| date2 | Вторая дата для сравнения. |
Смотрите также
- Функции для работы с датой и временем
- CheckFilterDates
Примеры использования
$DB->CompareDates($date1, $date2); if ($result==1) echo $date1." > ".$date2; elseif ($result==-1) echo $date1."
Новинки документации в соцсетях:
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.
Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
Илья Куталев 20.10.2020 22:44:31
| Цитата |
|---|
| fenix_63 пишет: На строке [CODE] $result = $DB ->CompareDates( $date1 , $date2 ); [/CODE] Выдаёт ошибку "Call to a member function CompareDates() on null (0)" . Как быть? |
Вероятнее всего, требуется объявить глобально
global $DB;
При этом важен формат даты:
global $DB; // Верный вызов. Результат: 0 $DB->CompareDates('01.01.2019', '01.01.2020'); // Неверный вызов. Результат: 0 $DB->CompareDates('2019-01-01', '2020-01-01');
