-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46654
- shell命令
-
- 文章:(42)篇
- 阅读:154551
- Git教程
-
- 文章:(36)篇
- 阅读:235267
- leetCode刷题
-
- 文章:(76)篇
- 阅读:132503
-
PHP时间字符串Y-m-d 0:0:0踩的坑2018-11-11 11:39 阅读(6283) 评论(0)
一、简介
php中时间使用起来很方便,可是一不小心,也很容易导致意想不到的bug。最近就踩坑了,看下面代码:
$startTs1 = date("Y-m-d 0:0:0"); $startTs2 = date("Y-m-d 00:00:00"); $endTs = date("Y-m-d H:i:s"); var_dump($startTs1 > $endTs); var_dump($startTs2 > $endTs);
取当天0点的时间,然后比较当前时间和0点的时间大小。
输出结果如下:
先思考几分钟~~ 决定在执行一次:
why?? 确定没有看错,有图有真相。
二、解析
1、为什么“Y-m-d 0:0:0” 和“Y-m-d 00:00:00”比较的结果不一样?
因为两个变量比较大小的时候,PHP会把它们作为字符串,并不是当做时间来看来。即会逐位比较字符串中的每一位。如下:
$str1 = '2018-11-11 0:0:0' $str2 = '2018-11-11 00:00:00' $str3 = '2018-11-11 09:12:10'
$str1 与 $tr3进行比较,前12位字符都是相同的,第13个字符,$str1 为“:”,对应的ASCII编码为“58”;$str3 为“9”,对应的ASCII编码为“57”,于是,就不在继续比较了,认定$str1大于$str3。如下:
$str2 与 $tr3进行比较,前12位字符都是相同的,第13个字符,$str2 为“0”,对应的ASCII编码为“48”;$str3 为“9”,对应的ASCII编码为“57”,于是,就不在继续比较了,认定$str3大于$str2。如下:
2、为什么同一代码,不同的时间比较的结果不一样?
因为
上午,是比较是“0:0:0”与“0*:**:**”,
下午,比较的是“0:0:0”与“1*:**:**”,
其中 *代表0~9的数字。所以下午执行的时候,$endTs 始终大于$startTs1
三、如何防止时间比较出错呢?
为了更加有效的比较时间,推荐还是使用时间戳比较合理。如下: