如果日期格式为'03_01_12'
和'31_12_11'
,如何比较php中的两个日期。
我正在使用此代码:
$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;
但它不起作用..
答案 0 :(得分:125)
您的括号并非全部匹配:
if(strtotime($date1) < strtotime($date2)){
//Your logic
}
更改为:
if(strtotime($date1) < strtotime($date2)){
//Your logic
}
答案 1 :(得分:37)
您必须确保日期是有效日期对象。
试试这个:
$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()
方法来获得差异。
答案 2 :(得分:34)
$format = "d_m_y";
$date1 = \DateTime::createFromFormat($format, "03_01_12");
$date2 = \DateTime::createFromFormat($format, "31_12_11");
var_dump($date1 > $date2);
答案 3 :(得分:8)
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天”
答案 4 :(得分:6)
扩展@ 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);
答案 5 :(得分:6)
<?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");
?>
答案 6 :(得分:4)
$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-&gt; d;
答案 7 :(得分:3)
不知道你的问题是什么,但是:
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;
}
}
答案 8 :(得分:3)
没有回答OP的实际问题,只回答了标题。因为这是“比较php中的日期”的最佳结果。
使用日期时间对象(php >= 5.3.0
)和Compare them directly
$date1 = new DateTime("2009-10-11");
$date2 = new DateTime("tomorrow"); // Can use date/string just like strtotime.
var_dump($date1 < $date2);
答案 9 :(得分:3)
试试这个
$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";
答案 10 :(得分:2)
每次比较maketime()
的结果
答案 11 :(得分:2)
您可以转换整数并进行比较。
例如:
$ date_1 =日期(&#39; Ymd&#39;); $ date_2 =&#39; 31_12_2011&#39;;
$ date_2 =(int)implode(array_reverse(explode(&#34; _&#34;,$ date_2)));
echo($ date_1&lt; $ date_2)? &#39; $ date_2比$ date_1&#39;更大:&#39; $ date_2小于$ date_1&#39;;
答案 12 :(得分:2)
我知道这已经晚了,但为了将来参考,请使用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);
}
答案 13 :(得分:1)
基准比较 date_create、strtotime、DateTime 和 direct
直接更快
$f1="2014-12-12";
$f2="2014-12-13";
$diff=false;
$this->bench('a');
for ($i=0; $i < 20000; $i++) {
$date1=date_create($f1);
$date2=date_create($f2);
$diff=date_diff($date1,$date2);
}
$this->bench('a','b');
for ($i=0; $i < 20000; $i++) {
$date1=strtotime($f1);
$date2=strtotime($f2);
if ($date1>$date2) {
$diff=true;
}
}
$this->bench('b','c');
for ($i=0; $i < 20000; $i++) {
$date1 = new DateTime($f1);
$date2 = new DateTime($f2);
if ($date1>$date2) {
$diff=true;
}
}
$diff=false;
$this->bench('c','d');
for ($i=0; $i < 20000; $i++) {
if ($f1>$f2) {
$diff=true;
}
}
$this->bench('d','e');
var_dump($diff);
$this->dumpr($this->benchs);
results:
[a] => 1610415241.4687
[b] => 1610415242.8759
[a-b] => 1.407194852829
[c] => 1610415243.5672
[b-c] => 0.69137716293335
[d] => 1610415244.7036
[c-d] => 1.1363649368286
[e] => 1610415244.7109
[d-e] => 0.0073208808898926
答案 14 :(得分:0)
我认为这是一个非常简单的功能
function terminateOrNotStringtoDate($currentDate, $terminationdate)
{
$crtDate = new DateTime($currentDate);
$termDate = new DateTime($terminationdate);
if($crtDate >= $termDate)
{
return true;
} else {
return false;
}
}
答案 15 :(得分:0)
伙计们,请不要这么简单简单的回答
$date1=date('d_m_y');
$date2='31_12_11';
$date1=str_replace('_', '-', $date1);
$date2=str_replace('_', '-', $date2)
if(strtotime($date1) < strtotime($date2))
echo '1 is small ='.strtotime($date1).','.$date1;
else
echo '2 is small ='.strtotime($date2).','.$date2;
我刚刚在您的代码中添加了两行
答案 16 :(得分:-3)
如果两个日期的格式相同,则使用比较运算符。
$date1 = "2018-05-05";
$date2 = "2019-08-19";
//comparison operator to
if ($date1 > $date2) {
echo "$date1 is latest than $date2";
}
else{
echo "$date1 is older than $date2";
}
输出: 2018-05-05早于2019-08-19