也许我有脑屁但是这个:
$dob = date ("Y-m-d",strtotime($_POST['dob']));
$ dob显示为1970-01-01
即使$ _POST ['dob']的值是10/5/66。
我在这里错过了什么吗?
更新:我发现如果POST是10/5/1966那么它就可以了。所以我想如果出生日期早于1970年1月1日,你需要4位数! 但是,如果dob比1970年1月1日更新,那么2位数将被假定为19xx
答案 0 :(得分:2)
这可能是PHP的strtotime()函数,它只支持Notes部分中记录的受限日期范围
您的代码段中的strtotime(" 10/5/66")会转换为2066年,并且您处于堆叠状态,并且它的工作意味着显示为unix时代的日期。时间戳的有效范围通常来自1901年12月13日星期五 20:45:54 UTC to Tue,20 Jan Jan 03:14:07 UTC。 (这些是日期 对应于32位带符号的最小值和最大值 整数。)
在PHP 5.1.0之前,并非所有平台都支持负时间戳, 因此,您的日期范围可能不会早于Unix 时代。这意味着,例如1970年1月1日之前的日期将无效 在Windows上,一些Linux发行版,以及其他一些操作系统 系统
如果您使用的是64位PHP,那么使用这种方式不会有问题。或者,您可以使用DateTime类。
答案 1 :(得分:1)
使用DateTime
,它应该适合您:
$_POST['dob'] = "10/5/66";
$date = new DateTime($_POST['dob']);
echo $date->format("Y-m-d");
输出:
2066-10-05
或更好的格式:
$_POST['dob'] = "10/5/1966";
$date = DateTime::createFromFormat("m/d/Y", $_POST['dob']);
echo $date->format("Y-m-d");