Ibu*_*Ibu 451
使用strtotime()你的第一次约会,然后date('Y-m-d')将其转换回:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Run Code Online (Sandbox Code Playgroud)
请注意,在函数中使用正斜杠/和连字符之间存在差异.引用php.net:-strtotime()
通过查看各个组件之间的分隔符来消除m/d/y或dmy格式的日期:如果分隔符是斜杠(/),则假设为美国m/d/y; 而如果分隔符是破折号( - )或点(.),则假定为欧洲dmy格式.
Mat*_*hew 414
您需要注意m/d/Y和mdY格式.PHP认为/是指m/d/Y,-意思是dmY.在这种情况下,我会明确描述输入格式:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
这样你就不会有某种解释的心血来潮.
use*_*671 27
要解析日期,您应该使用:DateTime :: createFromFormat();
例如:
$dateDE = "16/10/2013";
$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");
Run Code Online (Sandbox Code Playgroud)
但是,小心,因为这会崩溃:
PHP Fatal error: Call to a member function format() on a non-object
Run Code Online (Sandbox Code Playgroud)
你实际上需要检查格式是否正常,首先:
$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");
Run Code Online (Sandbox Code Playgroud)
现在,您将获得一个异常,而不是崩溃,您可以捕获,传播等.
$ dateDE格式错误,应为"16.10.2013";
N.B*_*.B. 22
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Run Code Online (Sandbox Code Playgroud)
编辑:您还可以将DateTimeZone传递给DateTime()构造函数,以确保创建所需时区的日期,而不是服务器默认日期.
小智 10
要从任何字符串创建日期,您可以使用:
$date = DateTime::createFromFormat('d-m-y H:i', '01-01-01 01:00');
echo $date->format('Y-m-d H:i');
Run Code Online (Sandbox Code Playgroud)
由于没有人提到这一点,这是另一种方式:
$date = date_create_from_format("m-d-Y", "10-16-2003")->format("Y-m-d");
Run Code Online (Sandbox Code Playgroud)