Подтвердить что ты не робот

Проверьте, установлены ли два объекта datetime PHP на одну дату (игнорируя время)

Я просто хочу сравнить 2 объекта datetime, чтобы узнать, установлены ли они на одну дату, но мне не нужен компонент времени объекта. На данный момент я использую команду date_format для извлечения строк, таких как "Y-m-d", но это кажется неудобным.

$firstDate = date_format($firstDateTimeObj, 'Y-m-d');
$secondDate = date_format($secondDateTimeObj, 'Y-m-d');

if !($firstDate == $secondDate) {

// some code
}

Я новичок в программировании и PHP, поэтому любые указатели оценили.

4b9b3361

Ответ 1

Используйте синтаксис объекта!

$firstDate = $firstDateTimeObj->format('Y-m-d');
$secondDate = $secondDateTimeObj->format('Y-m-d');

Вы были очень близки к выражению if, но! оператор должен находиться в круглой скобке.

if (!($firstDate == $secondDate))

Это также можно выразить как

if ($firstDate != $secondDate)

Ответ 2

Мой первый ответ был совершенно неправильным, поэтому я начинаю новый.

Самый простой способ, как показано в других ответах, - это date_format. Это почти наверняка путь. Однако есть и другой способ, который использует всю полноту классов DateTime. Используйте diff для создания экземпляра DateInterval, а затем проверьте его свойство d: если оно 0, это тот же день.

// procedural
$diff = date_diff($firstDateTimeObj, $secondDateTimeObj);

// object-oriented
$diff = $firstDateTimeObj->diff($secondDateTimeObj);

if ($diff->format('%a') === '0') {
    // do stuff
} else {
    // do other stuff
}

Обратите внимание, что это почти наверняка излишним для этого экземпляра, но это может быть полезным методом, если вы хотите в будущем делать более сложные вещи.

Ответ 3

Я думаю, что ваш подход хорош, но я бы удалил -, поскольку они ничего не добавляют.

$firstDate = date_format($firstDateTimeObj, 'Ymd');
$secondDate = date_format($secondDateTimeObj, 'Ymd');

if ($firstDate != $secondDate) {
    // some code
}

Ответ 4

Это отлично поработало для меня.

$date1=DateTime::createFromFormat('Y-m-d H:i:s', '2014-07-31 07:30:00')->format('Y-m-d');
$date2=DateTime::createFromFormat('Y-m-d H:i:s', '2014-08-01 17:30:00')->format('Y-m-d');
if($date1==$date2){
    echo "==";
}else{
    echo "!=";
}

Ответ 5

Поиск ответа с той же проблемой. Я пришел к этому решению, которое выглядит лучше для меня, затем использует diff или другие вещи.

Основная проблема - игнорировать временные части объекта DateTime, просто установите его на время, например, в 12:00:00

$firstDateTimeObj->setTime(12, 0, 0);
$secondDateTimeObj->setTime(12, 0, 0);

// The main problem was checking if different.. but you can use any comparison
if ($firstDateTimeObj != $secondDateTimeObj) {
}

Ответ 7

strtotime конвертирует текстовую дату в метку времени Unix: http://fr.php.net/manual/en/function.strtotime.php

$first = strtotime(date_format($firstDateTimeObj, 'Y-m-d'));
$second = strtotime(date_format($secondDateTimeObj, 'Y-m-d'));

if ($first != $second) {

// some code
}

А также:

if ($first > $second) {
// some code
}

if ($first < $second) {
// some code
}

Ответ 8

$first = strtotime(date_format($firstDateTimeObj, 'Y-m-d'));
$second = strtotime(date_format($secondDateTimeObj, 'Y-m-d'));

if ($first != $second) {
    // some code
}

Ответ 9

Инициализируйте объект DateTime и установите время на 00:00:00. Затем вы можете использовать любое сравнение между датами, игнорирующими время:

$today = \DateTime::createFromFormat('d/m/Y H:i:s', '21/08/2014 00:00:00');
$tomorrow = \DateTime::createFromFormat('d/m/Y H:i:s', '22/08/2014 00:00:00');

// now you can compare them just with dates
var_dump($today < $tomorrow); //true
var_dump($today === $tomorrow); //false
var_dump($today !== $tomorrow); //true

@Evert ответ работает нормально, но похоже, что неправильно преобразовать объект DateTime в строку, а затем сравнить их.

Ответ 10

Быстро и грязно, можно многократно использовать сколько угодно дат, возможно, все же потребуется некоторая корректировка:

Обновление: менее грязный.

if(sameDate($firstDateTimeObj, $secondDateTimeObj, $ThirdDateTimeObj))
{
   // your code

}

function sameDate (DateTime ...$dates) {

   foreach($dates as $date)
   {
      $test[] = $date->format('Ymd');
   }

   $result = array_unique($test);

   if(count($result) == 1)
   {
      return true;
   {

   return false;

}