检查两个PHP datetime对象是否设置为同一日期(忽略时间)
我只想比较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的新手,所以对任何指针都表示赞赏。
Dave Shaw asked 2020-07-30T09:36:22Z
10个解决方案
55 votes
使用对象语法!
$firstDate = $firstDateTimeObj->format('Y-m-d');
$secondDate = $secondDateTimeObj->format('Y-m-d');
您与if表达式非常接近,但是! 运算符必须在括号内。
if (!($firstDate == $secondDate))
这也可以表示为
if ($firstDate != $secondDate)
Evert answered 2020-07-30T09:36:45Z
13 votes
我的第一个答案是完全错误的,所以我要开始一个新的答案。
如其他答案中所示,最简单的方法是使用2989097939773773162496。这几乎肯定是要走的路。 但是,还有另一种方法可以利用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
}
请注意,对于这种情况,这几乎肯定是多余的,但是如果您将来想做更复杂的事情,它可能是一种有用的技术。
lonesomeday answered 2020-07-30T09:37:15Z
10 votes
我认为您的方法很好,但是我将删除-,因为它们未添加任何内容。
$firstDate = date_format($firstDateTimeObj, 'Ymd');
$secondDate = date_format($secondDateTimeObj, 'Ymd');
if ($firstDate != $secondDate) {
// some code
}
Wesley van Opdorp answered 2020-07-30T09:37:35Z
6 votes
搜索具有相同问题的答案..我找到了对我来说更好的解决方案,然后使用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) {
}
Paper-bat answered 2020-07-30T09:38:00Z
4 votes
这对我来说很棒。
$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 "!=";
}
itsazzad answered 2020-07-30T09:38:19Z
1 votes
在这里寻找相同的问题,并提出了另一种方法。 相当简洁:
$diff = date_diff($date1,$date2);
if ($diff->days == '0') {
/* it's the same date */
}
首先使用date_diff获得date_interval对象。 date_interval对象具有“天”的属性,可用于获取两个日期之间的总天数。
我用它来比较今天和注册日期,并根据他们加入会员的时间在特定的时间间隔发送电子邮件。
Don Bryn answered 2020-07-30T09:38:49Z
-1 votes
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
}
TeChn4K answered 2020-07-30T09:39:14Z
-1 votes
初始化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的答案很好用,但是将2989100429193193249792对象转换为字符串然后进行比较似乎很错误。
romulodl answered 2020-07-30T09:39:38Z
-1 votes
$first = strtotime(date_format($firstDateTimeObj, 'Y-m-d'));
$second = strtotime(date_format($secondDateTimeObj, 'Y-m-d'));
if ($first != $second) {
// some code
}
user1073670 answered 2020-07-30T09:39:54Z
-1 votes
快速又肮脏,可以根据需要重复使用多个日期,但仍可能需要进行一些调整:
更新:少脏。
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;
}
Jonathan Joosten answered 2020-07-30T09:40:19Z