Как сравнить две даты в PHP
как сравнить две даты в php, если даты находятся в формате '03_01_12' и '31_12_11' .
Я использую этот код:
$date1=date('d_m_y');
$date2='31_12_11';
if(strtotime($date1) < strtotime($date2))
echo '1 is small ='.strtotime($date1).','.$date1;
else
echo '2 is small ='.strtotime($date2).','.$date2;
но это не работает..
13 ответов:
вам нужно будет убедиться, что ваши даты являются действительными объектами даты.
попробуйте это:
$date1=date('d/m/y'); $tempArr=explode('_', '31_12_11'); $date2 = date("d/m/y", mktime(0, 0, 0, $tempArr[1], $tempArr[0], $tempArr[2]));затем вы можете выполнить
strtotime()метод, чтобы получить разницу.
ваши скобки не все совпало:
if(strtotime($date1))<strtotime($date2)))изменить для этого:
if(strtotime($date1) < strtotime($date2))
С помощью DateTime:: createFromFormat:
$format = "d_m_y"; $date1 = \DateTime::createFromFormat($format, "03_01_12"); $date2 = \DateTime::createFromFormat($format, "31_12_11"); var_dump($date1 > $date2);
функция date_diff () возвращает разницу между двумя объектами DateTime.
Если первая дата предшествует второй дате, будет возвращено положительное число дней; в противном случае отрицательное число дней:
<?php $date1=date_create("2013-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2); echo $diff->format("%R%a days"); ?>выход будет "+272 дней";
изменение $date1 = "2014-03-15"
<?php $date1=date_create("2014-03-15"); $date2=date_create("2013-12-12"); $diff=date_diff($date1,$date2); echo $diff->format("%R%a days"); ?>выход будет "-93 дни"
расширение @ nevermind ответ, можно использовать DateTime:: createFromFormat: например,
// use - instead of _. replace _ by - if needed. $format = "d-m-y"; $date1 = DateTime::createFromFormat($format, date('d-m-y')); $date2 = DateTime::createFromFormat($format, str_replace("_", "-",$date2)); var_dump($date1 > $date2);
<?php $expiry_date = "2017-12-31 00:00:00" $today = date('d-m-Y',time()); $exp = date('d-m-Y',strtotime($expiry_date)); $expDate = date_create($exp); $todayDate = date_create($today); $diff = date_diff($todayDate, $expDate); if($diff->format("%R%a")>0){ echo "active"; }else{ echo "inactive"; } echo "Remaining Days ".$diff->format("%R%a days"); ?>
вы можете попробовать что-то вроде:
$date1 = date_create('2014-1-23'); // format of yyyy-mm-dd $date2 = date_create('2014-2-3'); // format of yyyy-mm-dd $dateDiff = date_diff($date1, $date2); var_dump($dateDiff);вы можете получить доступ к разнице в днях, как это $dateDiff - >d;
Не знаю, что Вы проблема, но:
function date_compare($d1, $d2) { $d1 = explode('_', $d1); $d2 = explode('_', $d2); $d1 = array_reverse($d1); $d2 = array_reverse($d2); if (strtotime(implode('-', $d1)) > strtotime(implode('-', $d2))) { return $d2; } else { return $d1; } }
попробуй такое
$data1 = strtotime(\date("d/m/Y")); $data1 = date_create($data1); $data2 = date_create("21/06/2017"); if($data1 < $data2){ return "The most current date is date1"; } return "The most current date is date2";
Я знаю, что это поздно, но для дальнейшего использования поместите формат даты в распознанный формат с помощью str_replace, тогда ваша функция будет работать. (заменить подчеркивание тире)
//change the format to dashes instead of underscores, then get the timestamp $date1 = strtotime(str_replace("_", "-",$date1)); $date2 = strtotime(str_replace("_", "-",$date2)); //compare the dates if($date1 < $date2){ //convert the date back to underscore format if needed when printing it out. echo '1 is small='.$date1.','.date('d_m_y',$date1); }else{ echo '2 is small='.$date2.','.date('d_m_y',$date2); }
вы можете преобразовать для целого числа и сравнить.
например.:
$date_1 = дата ('Ymd'); $date_2 = '31_12_2011';
$date_2 = (int) implode (array_reverse(explode ( " _", $date_2)));
echo ($date_1
не отвечая на актуальную проблему OPs, но отвечая только на название. Так как это лучший результат для "сравнения дат в php".
довольно простой в использовании объектов Datetime (
v>= 5.3.0) и сравнивать их напрямую$date1 = new DateTime("now"); $date2 = new DateTime("tomorrow"); var_dump($date1 < $date2);Примечание: объект Datetime также может быть создан для предопределенной даты, как показано ниже.
$date1 = new DateTime('2009-10-11');
Comments