我遇到需要从字符串创建Datetime对象的情况。 当我在表示日期的字符串模式中保持一致时,就会出现问题。 以下是我的数据示例:
07/17/2012
2013/03/11
17/05/2015
17/17/2015
正如你所看到的,最后一个是无效的,无论如何,因为没有17个月,但前3个有效取决于月份位置(当然还有年份)
我的问题:有没有办法(非常肯定通过正则表达式)使用日期字符串作为返回datetime对象的参数来创建一个函数。如果字符串无效,请返回:1/1/1970 ...
答案 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日星期一”等。