PHP - 比较不同格式的日期

3

日期格式:

 $date1 = '16-MAR-2015';
 $date2 = '04-FEB-15';

我该如何检查

$date1 <= $date2 || $date1 => $date2

我需要将日期格式转换为什么?

 $date1 = '16-3-2015';
 $date2 = '04-2-15';

1
$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString); $newDateString = $myDateTime->format('m/d/Y'); 有一个神奇的函数叫做strtotime() - Ghostman
6个回答

5

使用strtotime()函数:

<?php

    $date1 = strtotime("16-MAR-2015");
    $date2 = strtotime("04-FEB-15");

?>

并比较


3
尝试这种方法,它有效。 演示
$date1 = DateTime::createFromFormat('j-M-Y', '16-MAR-2015');
$date2 = DateTime::createFromFormat('j-M-y', '04-FEB-15');
$date1=$date1->format('Y-m-d');
$date2=$date2->format('Y-m-d');
var_dump($date1 <= $date2);
var_dump($date1 >= $date2);

1
哇,我的天啊。 - Anthony Rutledge

0

在给定的格式下,您不需要进行任何转换,DateTime 将会满足您的需求。

只需将它们转换为 DateTime 对象并进行比较:

$date1 = '16-MAR-2015';
$date2 = '04-FEB-15';

$date1 = date_create($date1);
$date2 = date_create($date2);
// $date1 > $date2 -> true
// $date1 < $date2 -> false

或者

if (date_create($date1) > date_create($date2)) {
    // Use $date1 unchanged
}

1
虽然这是正确的,但在使用分隔符来定义这些样式化日期格式中的MM/DD/YYYY和DD-MM-YYYY时要小心。请参见http://php.net/manual/en/function.strtotime.php。 - Martin
它表示“可捕获的致命错误:无法将 DateTime 类的对象转换为字符串”。 - Slimshadddyyy
如果使用date_create()判断16-MAR-2015是否可与04-FEB-15(请注意年份格式)相比较? - Slimshadddyyy
@Slimshadddyyy,你一定是在尝试在其他地方使用$date1。请使用临时变量进行比较,例如$tmpDate1。DateTime对象的比较不会导致致命错误。我不确定我是否理解你的意思,但是是的,你可以使用if (date_create($date1) > date_create($date2)) { - Clément Malet
$date1 只被定义了一次,且没有被使用过。 - Slimshadddyyy

0
首先,您需要将它们转换为DateTime对象。

演示

$date1 = '16-MAR-2015';
$date2 = '04-FEB-15';

$dateComp1 = new DateTime($date1);
$dateComp2 = new DateTime($date2);

然后你可以比较它们,DateTime 足够智能以自动转换格式。

期望结果:捕获致命错误:DateTime类的对象无法转换为字符串 - Slimshadddyyy
你的PHP版本是什么? - EternalHour
请确保在 DateTime 对象中使用与 $date1$date1 不同的变量名。一旦它们被转换,您将无法对其进行回显或操作。 - EternalHour
它们已经不同了。为什么要使用DateTime而不是strtotime?有多种方法可以达到目的。那么DateTime::createFromFormat('j-M-Y', '16-MAR-2015');呢? - Slimshadddyyy

0

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString); $newDateString = $myDateTime->format('m/d/Y'); 有一个神奇的函数叫做strtotime()

如果你需要以可读的格式打印值,可以使用DATE函数

date("d-m-Y h:i:s",$date1);

在你的情况下,你想要使用

Date.parse()


soul: 我该如何使用上述代码来处理 $date1 = '16-MAR-2015'$date2 = '04-FEB-15' 这两个日期? - Slimshadddyyy
将其转换为 date("d-m-Y h:i:s",$date1); - Ghostman

-1

尝试

date1= new DateTime();
date1= new Datetime->format('d-m-Y'); // this will print year 4 digits ie; 2017

date2= new DateTime();
date2= new DateTime->format('d-m-y'); //this will print 2 digit year ie; 17

// to compare

$differance=$date1->diff($date2);

echo $differance->format('d-m-y'); //or change to upper case Y for 4 digit year

注意... 在 MySQL 5.6 中,输入格式似乎必须首先是 Y: 如果您首先使用 Y -first 格式插入它,则无论第二个格式如何,它似乎都可以正确比较。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接