今天在写代码时,验证时间字符串是否符合时间格式的时候,发现了一个有趣的现象,运行如下代码
<?php
$a = '2017';
$b = '201701';
$c = '20170101';
var_dump(date('Y',strtotime($a)));
var_dump(date('Y',strtotime($b)));
var_dump(date('Y',strtotime($c)));
得到结果如下:
发现不对,明明都是同一年的时间,格式化输出为啥得到的年份不一样。接着我又试了一下输出月份。
<?php
$b = '201701';
$c = '20170101';
echo var_dump(date('Y-m',strtotime($b)));
echo var_dump(date('Y-m',strtotime($c)));
结果:
发现输出月份也出现了同样的情况。
查找strtotime()函数的官方定义。
发现是time参数使用不规范,time参数是遵循gnu 日期输入格式,所以将time参数规范化,就可以解决这个问题了。比如在判断年份是否规范(一般都是规范的)可以默认加上"-01-01",判断月份是可以默认加上"-01" 。希望可以帮到大家,谢谢。