2015-04-24 50 views
0

我正在使用我的項目中的某些日期轉換,在開發環境中代碼按預期工作,但在生產環境中它提供了有線結果。使用日期和時間的奇怪結果PHP

在數據庫中日期值爲0000-00-00時會發生這種情況。

代碼

$db_pricedate = date('dmy', strtotime($row_country_price["pricedate"])); 

結果在開發 - 010170

結果正式版 - 3011-1

這實在是不可思議,代碼和數據庫是相同的。

有任何建議。請幫忙 。在此先感謝

兩臺服務器均PHP版本5.3.3

+1

您是否有權訪問php.ini文件?這通常是由php.ini文件中的時區之間的差異造成的。 – Blaatpraat

+1

如果它不是時區差異,您是否嘗試過使用$ db_pricedate = DateTime :: createFromFormat('dmy',$ row_country_price [「pricingate」]); – Rooneyl

回答

0

這可能是從本地的配置?

試圖將date()前補充一點:set_local('LC_TIME', 'en');

-1

PHP日期()轉換成0000-00-00嘗試01011970這個

if($row_country_price["pricedate"]!= "0000-00-00"){ 
    $db_pricedate = date('dmy', strtotime($row_country_price["pricedate"])); 
}else{ 
    $db_pricedate = $row_country_price["pricedate"]; 
} 
0

如果我沒看錯

你是在開發機器上具有32位系統,在生產服務器上具有64位系統。

你越來越怪異的結果的原因是

strtotime("0000-00-00 00:00:00"); 

返回

int(-62170005200) // on 64 bit system 
false // on 32 bit system 

這使得進一步的操作不同。

:只應用於PHP> = 5.3,我沒有檢查PHP 5.2 + 64位系統(它返回false AFAIK)。

0

這是因爲你的產品中有不同的時區。服務器& dev服務器。你可以通過改變你的dev服務器/ mysql服務器時區來解決這個問題。

要查看你的MySQL服務器tiemzone試試這個(假設你正在使用MySQL)

SELECT @@system_time_zone; 

如果在改變MySQL服務器時區有問題,你可以在腳本中更改時區。

如果問題仍沒有解決使用後

$date = DateTime::createFromFormat("Y-d-m", "0000-00-00"); 
echo $date->format("dmy"); 

它必須在相同的結果都開發&督促服務器工作(測試)。擔保

謝謝