gpt4 book ai didi

php - 比较 php 中的日期时出现奇怪的问题

转载 作者:行者123 更新时间:2023-12-02 15:20:52 26 4
gpt4 key购买 nike

我在比较 php 中的两个日期时遇到问题。

问题:当比较 12:00 AM(午夜)和 10:00 AM(早上)时,以下代码将无法正常工作。根据人类逻辑,上午 10:00 晚于中午 12:00。但计算机似乎无法识别这一点。

有什么方法可以以不同的方式做到这一点吗?

date_default_timezone_set('Europe/Athens');
$today = date("d-m-Y h:i:s A");
$today = date("d-m-Y h:i:s A",strtotime($today));
$max = date('d-m-Y h:i:s A', strtotime("31-12-2015 23:59:00"));
$min = date('d-m-Y h:i:s A', strtotime("14-12-2015 00:00:01"));

if (($today > $min) && ($today < $max)){
//do something
} else {
//something else done
}

最佳答案

因为date()返回字符串。

来自manual :

Return Values

Returns a formatted date string. If a non-numeric value is used for timestamp, FALSE is returned and an E_WARNING level error is emitted.


基本上,您的代码尝试执行的操作是这样的:

if("31-12-2015 23:59:00 PM" < "14-12-2015 00:00:01 AM") {
.......
}

因此,PHP 将忽略“AM”或“PM”字符串,而只比较数值。

编辑:来自comparison operator手册:

If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.

因此,由于 PHP 再次转换它们的值,因此您的代码将完全比较不同的值。


Is there any way to do this differently?

只需与 strtotime 值进行比较即可。

$today = strtotime("now");
$max = strtotime("31-12-2015 23:59:00");
$min = strtotime("14-12-2015 00:00:01");

if (($today > $min) && ($today < $max)){
//do something

}else{
//something else done
}

稍后使用日期将您的值再次格式化为 AM/PM 格式(如果需要)。

关于php - 比较 php 中的日期时出现奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34264576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com