如果我有一个格式为 mm-dd-YYYY 的PHP字符串(例如,10-16-2003),我该如何正确地将其转换为 Date 然后 DateTime 格式为 YYYY-mm-dd ?我要求 Date 和 DateTime 的唯一原因是因为我需要一个一个位置,另一个位于另一个位置 .
mm-dd-YYYY
Date
DateTime
YYYY-mm-dd
您需要注意m / d / Y和m-d-Y格式 . PHP认为 / 表示m / d / Y, - 表示d-m-Y . 在这种情况下,我会明确描述输入格式:
/
-
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
这样你就不会有某种解释的心血来潮 .
在您的第一个日期使用 strtotime() 然后 date('Y-m-d') 将其转换回来:
strtotime()
date('Y-m-d')
$time = strtotime('10/16/2003'); $newformat = date('Y-m-d',$time); echo $newformat; // 2003-10-16
请注意,在strtotime()函数中使用正斜杠 / 和连字符 - 之间存在差异 . 引用php.net:
通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点( . ),则假定为欧洲d-m-y格式 .
For first Date
$_firstDate = date("m-d-Y", strtotime($_yourDateString));
For New Date
$_newDate = date("Y-m-d",strtotime($_yourDateString));
如果您的格式为dd-mm-yyyy,那么在PHP中它将无法按预期工作 . 在PHP文档中,他们有以下指南 .
所以,你根本无法使用 . 当您尝试使用dd / mm / yyyy格式时,它将删除FALSE . 您可以使用以下内容进行调整 .
$date = "23/02/2013"; $timestamp = strtotime($date); if ($timestamp === FALSE) { $timestamp = strtotime(str_replace('/', '-', $date)); } echo $timestamp; // prints 1361577600
$d = new DateTime('10-16-2003'); $timestamp = $d->getTimestamp(); // Unix timestamp $formatted_date = $d->format('Y-m-d'); // 2003-10-16
编辑:您还可以将DateTimeZone传递给DateTime()构造函数,以确保创建所需时区的日期,而不是服务器的默认日期 .
要解析日期,您应该使用:DateTime :: createFromFormat();
例如:
$dateDE = "16/10/2013"; $dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
但是,小心,因为这会崩溃:
PHP Fatal error: Call to a member function format() on a non-object
你实际上需要检查格式是否正常,首先:
$dateDE = "16/10/2013"; $dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE); if (!$dateObj) { throw new \UnexpectedValueException("Could not parse the date: $date"); } $dateUS = $dateObj->format("m/d/Y");
现在,您将获得一个异常,而不是崩溃,您可以捕获,传播等 .
$ dateDE格式错误,应为“16.10.2013”;
6 回答
您需要注意m / d / Y和m-d-Y格式 . PHP认为
/
表示m / d / Y,-
表示d-m-Y . 在这种情况下,我会明确描述输入格式:这样你就不会有某种解释的心血来潮 .
在您的第一个日期使用
strtotime()
然后date('Y-m-d')
将其转换回来:请注意,在strtotime()函数中使用正斜杠
/
和连字符-
之间存在差异 . 引用php.net:For first Date
For New Date
如果您的格式为dd-mm-yyyy,那么在PHP中它将无法按预期工作 . 在PHP文档中,他们有以下指南 .
所以,你根本无法使用 . 当您尝试使用dd / mm / yyyy格式时,它将删除FALSE . 您可以使用以下内容进行调整 .
编辑:您还可以将DateTimeZone传递给DateTime()构造函数,以确保创建所需时区的日期,而不是服务器的默认日期 .
要解析日期,您应该使用:DateTime :: createFromFormat();
例如:
但是,小心,因为这会崩溃:
你实际上需要检查格式是否正常,首先:
现在,您将获得一个异常,而不是崩溃,您可以捕获,传播等 .
$ dateDE格式错误,应为“16.10.2013”;