将string转换为Date和DateTime
如果我有一个格式为mm-dd-YYYY
的PHPstring(例如10-16-2003),那么我该如何正确地将它转换为Date
,然后是格式为YYYY-mm-dd
? 我要求Date
和DateTime
Date
的唯一原因是因为我需要一个地方,另一个在不同的地方。
在你的第一个date然后使用strtotime()
date('Ym-d')
把它转换回来:
$time = strtotime('10/16/2003'); $newformat = date('Ym-d',$time); echo $newformat; // 2003-10-16
请注意,在strtotime()
函数中使用正斜杠/
和连字符是有区别的。 从php.net引用:
m / d / y或dmy格式的date通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线(/),则假定美国m / d / y; 而如果分隔符是破折号( – )或点(。),则假定欧洲的dmy格式。
你需要小心m / d / Y和mdY格式。 PHP认为/
表示m / d / Y, -
表示dmY。 我将在这种情况下明确地描述input格式:
$ymd = DateTime::createFromFormat('md-Y', '10-16-2003')->format('Ym-d');
这样,你不是在某种解释的怪念头。
$d = new DateTime('10-16-2003'); $timestamp = $d->getTimestamp(); // Unix timestamp $formatted_date = $d->format('Ym-d'); // 2003-10-16
编辑:你也可以将DateTimeZone传递给DateTime()构造函数,以确保创build所需时区的date,而不是服务器的默认date。
parsingdate,你应该使用:DateTime :: createFromFormat();
例如:
$dateDE = "16/10/2013"; $dateUS = \DateTime::createFromFormat("dmY", $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("dmY", $dateDE); if (!$dateObj) { throw new \UnexpectedValueException("Could not parse the date: $date"); } $dateUS = $dateObj->format("m/d/Y");
现在不是崩溃,你会得到一个exception,你可以捕捉,传播等
$ dateDE格式错误,应该是“16.10.2013”;
如果您使用的是PHP 5.2或更高版本,请使用上述的DateTime。 这篇文章将有所帮助。