2010-04-29 115 views
0

我正在使用if語句的簡寫符號來格式化字段。如果該字段是一個空字符串,我把它留作一個空字符串,如果沒有,那麼我想格式化爲適當的日期時間格式,因此它可以插入到MySQL數據庫。這裏是我的PHP代碼PHP - 如果聲明的日期格式與奇怪的輸出短手

$date = ($date == '') ? date("Y-m-d", strtotime($date)) : $date; 

由於某種原因,當$日期字符串不空它返回它的詮釋,他格式「M/d/Y」例如:04/01/2010

當我如果

$date = date("Y-m-d", strtotime($date)); 
print($date); 

它是正確這樣的「年月日」或格式化2010-04-01拉碼出來的簡寫。有誰知道爲什麼發生這種情況?謝謝

回答

1

我走了一下這裏的黑暗中刺在你試圖完成,但你可能有更多的運氣:

$date = ($ts = strtotime($date)) ? date("Y-m-d", $ts) : ''; 

這將嘗試解析任何傳入的日期字符串,並且如果日期不可解析,將失敗爲空字符串。

請注意,檢查strtotime解析日期的能力很重要,因爲如果$ date不包含可解析日期,date(「Ymd」,strtotime($ date))將在1970年左右返回某個日期。

例如爲:

$ php -r 'var_dump(date("Y-m-d", strtotime("thisisnotadate")));' 
string(10) "1970-01-01" 
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/1901")));' 
string(10) "1970-01-01" 
$ php -r 'var_dump(date("Y-m-d", strtotime("01/01/2048")));' 
string(10) "1970-01-01" 
$ 

的strtotime只能處理,適合在一個32位的時間戳,它限制到1970年的日期 - 2038另外,一些日期格式可能是不明確的。

+0

感謝這正是我所需要的。 – McNabbToSkins 2010-04-29 14:17:13

0

在您描述的情況下,$date必須已經在腳本的其他地方使用m/d/Y表示法設置。在這種情況下,三元操作員不會觸及$date

當你擺脫的簡寫,即m/d/Y字符串被迫進入一個時間戳由strtotime,然後date()到合適的Y-m-d字符串。

+0

都能跟得上沒有,我有檢查,它是在速記如果語句突然發生。 – McNabbToSkins 2010-04-29 14:05:07

+0

@McN你可以在執行代碼之前顯示'$ date'的示例值嗎? – 2010-04-29 14:06:12

+0

$ date ='4/01/2010'; 是什麼它打印出來,所以我想你是對的,輸入框設置它,我猜這個函數只是因爲某些原因,當它在速記內如果。 – McNabbToSkins 2010-04-29 14:08:36

0

現在,你的說法是:

If $date is an empty string, pass that empty string as a timestamp to the string to time function. Pass that to the date function. Otherwise return the contents of $date.

也許你打算:

$date = ($date == '') ? date("Y-m-d") : $date; 
+0

我的意圖是,如果它是一個空字符串,則保留一個空字符串,如果不是,則使用strtotime和date函數合成它。我需要在那裏的strtotime正確格式化爲mysql – McNabbToSkins 2010-04-29 14:06:52

+1

@McNabb你的代碼現在正在做相反的事情。你需要把他們轉過來。 – 2010-04-29 14:11:57

1

你混淆你的三元運算符的參數,只需切換他們,或改變平等的運營商來檢查不等式:

$date = ($date !== '') ? date("Y-m-d", strtotime($date)) : $date; 
0

我看來,你正在做的事情,你不需要(使用三元語法)。從您的意見一個My intention is that if it is an empty string then keep it an empty string, if not then formate it using strtotime then the date function. I would need the strtotime in there to properly format it for mysql

if($date != '') // leave it alone if it is an empty string 
{ 
    $date = date("Y-m-d", strtotime($date)); 
} 

重要提示 - 我沒碰過PHP多年,所以語法可能會關閉,但原理是一樣的)