从字符串创建Datetime对象

时间:2015-06-04 14:36:22

标签: php string datetime

我遇到需要从字符串创建Datetime对象的情况。 当我在表示日期的字符串模式中保持一致时,就会出现问题。 以下是我的数据示例:

07/17/2012
2013/03/11
17/05/2015
17/17/2015

正如你所看到的,最后一个是无效的,无论如何,因为没有17个月,但前3个有效取决于月份位置(当然还有年份)

我的问题:有没有办法(非常肯定通过正则表达式)使用日期字符串作为返回datetime对象的参数来创建一个函数。如果字符串无效,请返回:1/1/1970 ...

3 个答案:

答案 0 :(得分:1)

您可以尝试使用字符串值创建DateTime对象。如果日期格式无效,它将抛出异常,然后你可以抓住它并返回你的1/1/1971

try {
    $dateTime = new DateTime('17/17/2015');
    return $dateTime;
} catch (Exception $e) {
   return '1/1/1971';
}

答案 1 :(得分:0)

您可以使用DateTime

$myDate = '17/17/2015';

$date = DateTime::createFromFormat('d/m/Y', $myDate);

if (DateTime::getLastErrors()['warning_count'] >= 1) {
    // Invalid
} else {
    // Valid date
}

答案 2 :(得分:0)

  

当我在表示日期

的字符串模式中没有一致性时,会出现问题

为此目的,php提供strtotime()http://php.net/manual/en/function.strtotime.php

使用示例:

   $str1 = "2015-06-04 16:00";
   $str2 = "06/04/2015 4 pm";
   $str3 = "04.06.2015 16:00";

   $actualDate = date("Y-m-d H:i:s", strtotime($str1));
   echo $actualDate."<br />";
   $actualDate = date("Y-m-d H:i:s", strtotime($str2));
   echo $actualDate."<br />";
   $actualDate = date("Y-m-d H:i:s", strtotime($str3));
   echo $actualDate."<br />";

   //all will produce "2015-06-04 16:00:00"

作为奖励,strtotime也支持像

这样的“疯狂”表达
$actualDate = date("Y-m-d H:i:s", strtotime("06/04/2015 + 1 day - 8 hours")); 
echo $actualDate."<br />";
// "2015-06-04 16:00:00"
还有更多诸如“本周一”,“下周二”,“2038年1月1日星期一”等。