Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么该日期格式继续更改为1970-01-01?_Php_Date - Fatal编程技术网

Php 为什么该日期格式继续更改为1970-01-01?

Php 为什么该日期格式继续更改为1970-01-01?,php,date,Php,Date,我正在尝试将日期04/03/1992转换为1992-04-03,以便将其插入到日期格式的SQL表中 下面是我的PHP代码。由于某些原因,仅在某些情况下转换为1970-01-01 例如,如果我尝试转换2021年4月13日,则打印为1970-01-01 代码如下- $date = $_POST["dateOfBirth"]; $dateToTime = strtotime($date); $DOB = date("Y-m-d", $dateToTime); $licenseNumber = $_P

我正在尝试将日期04/03/1992转换为1992-04-03,以便将其插入到日期格式的SQL表中

下面是我的PHP代码。由于某些原因,仅在某些情况下转换为1970-01-01

例如,如果我尝试转换2021年4月13日,则打印为1970-01-01

代码如下-

$date = $_POST["dateOfBirth"];
$dateToTime = strtotime($date);
$DOB = date("Y-m-d", $dateToTime);

$licenseNumber = $_POST["licenseNumber"];

$licenseDate = $_POST["licenseExpiryDate"];
$licenseDateToTime = strtotime($licenseDate);
$licenseExpiryDate = date('Y-m-d', $licenseDateToTime);

当您使用前斜杠
/
和破折号
-
时,strotime函数对以下情况非常敏感。下面引用php.net中的一段话进行解释

m/d/y或d-m-y格式的日期通过查看 不同组件之间的分隔符:如果分隔符是 斜杠(/),则假定为美式m/d/y;然而,如果 分隔符是破折号(-)或点(.),然后是欧洲d-m-y格式 这是假定的

您的日期为欧洲格式,因此最简单的解决方案是使用
str\u replace
功能将前斜杠
/
替换为短划线
-

$date = str_replace("/","-",$_POST["dateOfBirth"]); $dateToTime = strtotime($date); $DOB = date("Y-m-d", $dateToTime);

$licenseNumber = $_POST["licenseNumber"];

$licenseDate = str_replace("/","-",$_POST["licenseExpiryDate"]); $licenseDateToTime = strtotime($licenseDate); $licenseExpiryDate = date('Y-m-d', $licenseDateToTime);

因为2021年4月13日是m/d/Y而不是你所期望的d/m/Y。您知道哪一个月是13号吗?
通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中日期的歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式。但是,如果年份以两位数格式给出,且分隔符为破折号(-),则日期字符串将解析为y-m-d。
-读取文档:。。。“注意:m/d/y或d-m-y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),则假定为美国的m/d/y;”您似乎理解这一点,因为您编写的
04/03/1992
1992-04-03
。这意味着
13/04/2021
将是
2021-13-04
。除非特朗普在卸任前计划日历改革,否则就不会有第13个月。谢谢,伙计——与其他无用的回答不同,这是完美的,也正是我想要的。非常感谢:)!