2011-12-28 43 views
0

我有以下問題。我有一個腳本可以獲得電視節目的Airdate,並在將它保存到我的數據庫之前進行修改。本地在我的本地主機上它的工作原理非常完美,但是當我在網上嘗試它並將其上傳到我的Web服務器時,它顯示出不同的行爲。我不知道爲什麼是這樣。不同的PHP腳本行爲在線

下面是一些例子:


數據獲取:播出12年1月22日

我的劇本的結局應該是什麼:2012-01-22

什麼我上網:2022/12--


數據獲取:播出11年8月29日

什麼我的腳本的結果應該是:2011-08-29

我上網是什麼:2029/11--


數據獲取:播出12年2月12日

什麼我的腳本的結果應該是:2012-02-12

我上網是什麼:2012/12--


這裏是我的PHP腳本:

if(strstr($serie['airdate'], 'Airs')) { 
      $date = substr($serie['airdate'], 5); 
     } 

     if(strstr($serie['airdate'], 'Aired')) { 
      $date = substr($serie['airdate'], 6); 
     } 

     $mm = strstr($date, "/", true); 
     $mmStrLen = strlen($mm); 
     if((strlen($mm)) == "1") { 
      $mm = "0".$mm; 
     } 

     $dd = substr($date, $mmStrLen+1); 
     $dd = strstr($dd, "/", true); 
     $ddStrLen = strlen($dd); 
     if((strlen($dd)) == "1") { 
      $dd = "0".$dd; 
     } 

     $yy = substr($date, $mmStrLen+1+$ddStrLen+1); 
     if((strlen($yy)) == "1") { 
      $yy = "0".$yy; 
     } 

     $serie['date'] = "20".$yy."-".$mm."-".$dd; 

$意甲[「廣播日」]是我得到的數據和$意甲[「日期」]是改變的價值應該被保存。

我在本地使用的PHP版本是5.3.8,我的一個webhoster是5.2.17。但我想這不是問題的根源。

+0

是否驗證你的在線版本獲得數據?我知道將使用不同日期格式的Web服務取決於您的機器物理位置(通過IP)。 –

+0

我保存了我在數據庫中獲得的原始airdate數據,並且它與在線完全相同。如果你的意思是? – Sebsemillia

回答

1

無法將評論格式化爲代碼,因此我必須將其作爲答案編寫。

請試試這個兩側

$x=explode(' ',$serie['airdate']); 
if (sizeof($x)!=2) die("Error in step 1"); 
$x=explode('/',$x[1]); 
if (sizeof($x)!=3) die("Error in step 2"); 
$serie['date']=sprintf("20%02d-%02d-%02d",$x[2],$x[0],$x[1]); 
+0

是的,這似乎在雙方工作!非常非常感謝你!! – Sebsemillia

1

看看你在本地vs在服務器上分割的原始日期字符串。我敢打賭,操作系統日期格式在本地不同於服務器,並且您的字符串拆分代碼不是用來處理服務器使用的不同格式的。

+0

AFAICS他沒有使用日期函數 –

+0

確切地說,我沒有在這裏使用日期函數,只是字符串分裂,所以說.. – Sebsemillia

+0

我們所看到的只是'$ serie ['airdate']'。我們如何知道它來自哪裏?它可能來自RSS提要或以不同方式格式化信息的數據庫。 – Origin

1

這是一個非常多的代碼來處理日期。曾嘗試使用strtotime()函數?您可以將它與date()函數配對,以輕鬆地重新格式化PHP中的日期。

+0

這可能更適合作爲評論而不是答案。 –