在PHP中如何检查时间是否在两个时间之间

84

我有三个字符串(当前时间、日落时间和日出时间),如何判断当前时间是否在日出时间和日落时间之间?

$current_time = "10:59 pm";
$sunrise = "5:42 am";
$sunset = "6:26 pm";

20
我认为将这个问题投反对票是不公平的。链接的其他答案仅涉及日期。我认为人们一旦看到任何问题得到-1的评分,就会跟随潮流。 - Evert
1
@WebnetMobile 我认为比较日期与比较白天有些不同。 - Ace
3
哇?为什么我的回答会被踩?这个网站不是应该在你自己不能做某事时提出问题吗?我有哪里做错了吗? - user966582
@JohnConde 很棒。这是一个我自己无法完成的基础问题。如果是24小时格式,我可以转换成分钟,但由于上午/下午的原因,我无法使其工作,所以我提出了问题。 - user966582
这实际上是在比较日期,因为您暗示所有三个时间都在同一天。使用@John Conde的方法将所有三个时间字符串转换为日期对象“TODAY”-因此今天早上5:42等。 - James
显示剩余3条评论
2个回答

124
$current_time = "4:59 pm";
$sunrise = "5:42 am";
$sunset = "6:26 pm";
$date1 = DateTime::createFromFormat('h:i a', $current_time);
$date2 = DateTime::createFromFormat('h:i a', $sunrise);
$date3 = DateTime::createFromFormat('h:i a', $sunset);
if ($date1 > $date2 && $date1 < $date3)
{
   echo 'here';
}

在此查看示例演示

参考资料


请纠正我如果我错了,我还没有尝试过这个函数。 - Ace
老而弥坚的经典之作 ;) - Funk Forty Niner
11
如果所有的时间段都在同一天,这种方法可能有效,但如果你要检查某个时间点是否在8点到第二天凌晨2点之间,比如10点晚上,这种方法就会失败。 - oucil
3
小修改(如果当前时间没有手动给出):$current_time = date('h:i:s a');,如果我们在 if 条件语句中使用 >=, <=,那么我们将得到精确的答案。你的答案非常有帮助,约翰。 - Prabs
1
对于时间检查落在下一天的情况(例如像 @oucil 提到的“如果晚上10点大于晚上8点且小于凌晨2点”)- 有一个有用的函数可以处理所有情况在这里 - Sean
显示剩余9条评论

2
我建议您首先使用 substr 函数和 intval 将字符串转换为整数。
之后,您应该能够简单地比较时间。
(请注意,您应该使用下午六点而不是下午六点,这样更容易处理,因此您可以使用 substr“检测”时间是上午还是下午,并将“12”添加到数字中)
我相信有更优雅的解决方法,但这只是为没有高级 PHP 开发人员提供基本思路的简单方法。
希望它能有所帮助。

4
strtotime()比substr()更好。 - CrabLab

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