将string转换为Date和DateTime

如果我有一个格式为mm-dd-YYYY的PHPstring(例如10-16-2003),那么我该如何正确地将它转换为Date ,然后是格式为YYYY-mm-dd ? 我要求DateDateTime 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。 这篇文章将有所帮助。