php 时间转换为 y m d,PHP时间字符串Y-m-d 0:0: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点的时间大小。

输出结果如下:

3d157a8839b278821b60e2661fb402fd.png

先思考几分钟~~ 决定在执行一次:

a45b78ee0e5004fcbdd64e21b15b6c49.png

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。如下:

dfa01fca4212780a785e6916cb206244.png

$str2 与 $tr3进行比较,前12位字符都是相同的,第13个字符,$str2 为“0”,对应的ASCII编码为“48”;$str3 为“9”,对应的ASCII编码为“57”,于是,就不在继续比较了,认定$str3大于$str2。如下:

f6735f88ca2119fd088531c41adc0319.png

2、为什么同一代码,不同的时间比较的结果不一样?

因为

上午,是比较是“0:0:0”与“0*:**:**”,

下午,比较的是“0:0:0”与“1*:**:**”,

其中 *代表0~9的数字。所以下午执行的时候,$endTs 始终大于$startTs1

三、如何防止时间比较出错呢?

为了更加有效的比较时间,推荐还是使用时间戳比较合理。如下:

ee5fe034df3c713cb4658b85b33a86ce.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值