2015-06-04 88 views
0

我有一個情況我需要從字符串創建日期對象DateTime對象。 問題是當我沒有在表示日期字符串的模式一致。 這些都是我的數據的例子:創建一個從字符串

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

正如你所看到的,最後一個是無效的,無論是什麼,因爲17號一個月,但第3是根據每月位置有效(和當然,這一年)

我的問題:是否有任何方式(通過正則表達式很肯定),以與日期字符串作爲參數,返回日期時間對象的函數。如果字符串是無效的,返回:1/1/1970 ...

+1

什麼明確的日期,就像2015年4月6日? –

+0

您必須考慮解決方案_how_您的程序可以區分不同的格式。 – moffeltje

+0

例如:計算第一個「/」之前的字符數。如果它是4你知道它的一年。 – moffeltje

回答

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月的」之類的。

0

您可以使用DateTime

$myDate = '17/17/2015'; 

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

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

問題是我不能ASURE這種格式: 'D/M/Y' 在 createFromFormat( 'D/M/Y',$指明MyDate) 看看到數據的例子 – Oriam

+0

你可以使用'的strtotime ',那麼? – cjhill

+0

NOP,我們來看一看:http://php.net/manual/es/function.strtotime.php :( – Oriam

1

您可以嘗試使用字符串值創建DateTime對象。它會拋出異常,如果日期的格式是無效的,那麼你可以捕捉它,並返回你的1971年1月1日

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