2009-08-17 56 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'])); 
}