2013-05-05 198 views
0

我需要能夠將字符串(請參見下面的示例)轉換爲可添加到MySQL的格式。我可以將其添加爲var車,但我需要能夠根據這些日期範圍運行查詢。將字符串轉換爲MySQL日期

例如'02 May 2013 12:08 AM GMT'

任何建議達到此目的的最佳方法?

編輯 目前嘗試以下操作:

$date = date_create_from_format('d M Y H:i A e', '02 May 2013 12:08 AM GMT'); 
echo $date; 

,但得到的服務器錯誤,當我試圖呼應的日期。

我也試過以下,打破了日期和時區分開,儘量單獨對付它:

$myvalue = '02 May 2013 12:08 AM GMT'; 
$arr = explode(' ',trim($myvalue)); 
$timezone = new DateTimeZone($arr[5]); 
$arr[count($arr)-1]=''; 
$time=implode(' ',$arr); 
$date = date_create_from_format('d M Y h:i A', $time, $timezone); 
echo $date; 

但同樣我得到了服務器錯誤。

編輯 我剛剛意識到,因爲它不會出現與此功能可用格式的代碼的第二塊可能是想錯了,由於GMT。

編輯 經過進一步調查,我認爲存儲數據的最佳方式是讓存儲爲DATETIMEin MySQL的使用相同的時區(GMT)所有日期和與它一起存儲實際的時區,他們是和使用在需要時運行查詢的時區。

$myvalue = '02 May 2013 12:08 AM GMT'; 
$arr = explode(' ',trim($myvalue)); 
$timezone = new DateTimeZone($arr[5]); 
$arr[count($arr)-1]=''; 
$time=implode(' ',$arr); 
$timestamp = strtotime($time); 
$date = date("Y-m-d H:i:s", $timestamp); 
echo $date; 
+0

對於除時區以外的所有內容:http://stackoverflow.com/questions/10539154/insert-into-db-datetime-string對於時區:https://dev.mysql.com/doc/refman/5.5/ en/date-and-time-functions.html#function_convert-tz所以你必須先按時區分割字符串,而不是先分區。或者,如果時區永遠不變,您可以忽略它。 – Patashu 2013-05-05 00:54:06

+0

右側沒有任何鏈接有幫助嗎? – 2013-05-05 00:54:16

+0

你會得到哪些錯誤? '服務器錯誤'不能幫助任何人。確切的錯誤消息更有用。 – Arjan 2013-05-05 10:44:16

回答

-1

可以使用strtotime()來的時間(如你的例子)的文本表示轉換爲Unix時間戳:

$timestamp = strtotime($string); 

然後你就可以存儲在MySQL的TIMESTAMP字段類型此值。

0

使用DateTime類createFromFormat函數。如果你的PHP版本< = 5.3。這裏的文檔:http://www.php.net/manual/en/datetime.createfromformat.php

編輯:

$date = DateTime::createFromFormat('d M Y H:i A e','02 May 2013 12:08 AM GMT'); 
echo $date->getTimeZone()->getName(); //return 'UTC' 
echo $date->format('Y-m-d H:i:s'); // return 2013-05-02 00:08 

設置在MySQL會議timezone

+0

這似乎是票。我唯一意識到的是時區很重要,所以我需要根據時區調整到GMT時間的時間。這可能沒有一個混亂的if/else或開關? – 2013-05-05 08:33:49

+0

我不太明白你的意思。您的格式是:您的時區是UTC(e)。 – bvarga 2013-05-05 09:06:19

+0

抱歉... GMT。 :) – bvarga 2013-05-05 09:39:48

0

我希望你要轉換從JavaScript 「日期()」 函數獲取的數據。 考慮在javascript部分該功能:

function ISODateString(d) // to get date in format that MySQL accepts 
{ 
    function pad(n){return n<10 ? '0'+n : n} 
    return d.getUTCFullYear()+'-' 
     + pad(d.getUTCMonth()+1)+'-' 
     + pad(d.getUTCDate()) +' ' 
     + pad(d.getUTCHours())+':' 
     + pad(d.getUTCMinutes())+':' 
     + pad(d.getUTCSeconds()) 
} 

此使用後:

var d=ISODateString(new Date()) 

現在與URL編碼發送,要麼使用POST方法或GET爲UTF-8

0
$date = date_create_from_format('d M Y H:i A e', '02 May 2013 12:08 AM GMT'); 
echo $date; 

由於不同的原因,此代碼將始終生成錯誤消息。

如果PHP版本是< 5.3那麼代碼將失敗,因爲date_create_from_format()不存在。

如果PHP版本是> = 5.3,則第二線將失敗,因爲$dateDateTime一個實例,並且該類別不具有__toString()方法。改爲使用DateTime::format()

1

爲什麼你不這樣做呢?

function convertToMysqlTime($string){ 
    $seconds = strtotime($string); 
    if (!$seconds) return false; 
    return date("Y-m-d H:i:s", $seconds); 
} 

echo convertToMysqlTime('02 May 2013 12:08 AM GMT'); 

它也是格林尼治標準時間的一部分。

+0

這個函數有一個錯誤。您正在執行strtotime的雙重轉換。您的功能應以「返回日期(」Y-m-d H:i:s「,$秒)結束;」 – Studio4 2014-07-18 14:28:35

+0

哇。我不知道如何發生! :)修正。 – Smuuf 2014-07-20 17:37:45