2009-08-17 87 views
1

我的下面的函數從另一個正常工作的函數中複製而來。如果從查詢字符串獲取值,並把它們變成一個日期:從查詢字符串獲取值時出現的問題

function updateShift() 
    { 
     echo $name = $_GET['shift_name']; 

     echo $start_date = date('Y-m-d H:i:s', strtotime("{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}")); 
     echo $stop_date = date('Y-m-d H:i:s', strtotime("{$_GET['stop_hours']}:{$_GET['stop_minutes']} {$_GET['stop_ampm']}")); 
} 

但是它返回:

Shift Name 
1969-12-31 17:00:00 
1969-12-31 17:00:00 

知道爲什麼這工作正常,在其他地方而不是在這裏?查詢字符串在shift_name中正確顯示。

+0

你請求的URI是什麼? – 2009-08-17 12:08:00

+0

strtotime返回什麼? – 2009-08-17 12:08:45

+1

action = update&shift = 19&shift_name = Fun!&start_hours = 4&start_minutes = 0&start_ampm = PM&stop_hours = 6&stop_minutes = 0&stop_ampm = PM – ian 2009-08-17 12:14:31

回答

0

你收到的是Unix紀元的開始,因爲你的日期函數調用是越來越假(或0)作爲該日期第二個論點。我剛剛使用你的代碼進行了一些快速測試,我發現strtotime在提供的值中返回false。

echo "{$_GET['start_hours']}:{$_GET['start_minutes']} {$_GET['start_ampm']}"; 
=> '4:0 PM' 

你需要確保你有2個位數的分領域允許的strtotime看到它作爲一個有效的時間和正確分析。爲此,您可以更新您的查詢字符串,使用str_pad或sprintf來確保您有2位數字,以使時間有效。

1

如果你這樣做:

function updateShift() 
    { 
     echo $name = $_GET['shift_name']; 

     echo $start_date = date('Y-m-d H:i:s', strtotime($_GET['start_hours'].':'.$_GET['start_minutes'].' '.$_GET['start_ampm'])); 
     echo $stop_date = date('Y-m-d H:i:s', strtotime($_GET['stop_hours'].':'.$_GET['stop_minutes'].' '.$_GET['stop_ampm'])); 
} 

function updateShift() 
    { 
     echo $_GET['shift_name']; 

     echo date('Y-m-d H:i:s', strtotime($_GET['start_hours'].':'.$_GET['start_minutes'].' '.$_GET['start_ampm'])); 
     echo date('Y-m-d H:i:s', strtotime($_GET['stop_hours'].':'.$_GET['stop_minutes'].' '.$_GET['stop_ampm'])); 
}