php判断同一天,检查两个PHP datetime对象是否设置为同一日期(忽略时间)

检查两个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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值