2009-08-17 5 views
1

Ma fonction ci-dessous copiée à partir d'une autre fonction qui fonctionne correctement. Devrait obtenir des valeurs de la chaîne de requête et les transformer en une date:Problèmes lors de l'obtention de valeurs à partir de la chaîne de requête

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']}")); 
} 

Cependant, il retourne:

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

Toute idée pourquoi cela fonctionne bien ailleurs, mais pas ici? La chaîne de requête est là comme en témoigne le passage shift_name correctement.

+0

Quelle est l'URI demandée? –

+0

Que retourne strtotime? –

+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

Répondre

0

Les dates que vous avez reçues ont été le début de l'époque Unix depuis votre appel de fonction de la date se faisait fausse (ou 0) comme deuxième argument. Je viens de faire des tests rapides en utilisant votre code et je vois que strtotime retourne faux avec les valeurs fournies.

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

Vous devez vous assurer que vous avez 2 chiffres dans votre champ de minutes pour permettre strtotime de le voir comme un temps valide et pour analyser correctement. Pour cela vous pouvez soit mettre à jour votre chaîne de requête, utiliser str_pad ou sprintf pour vous assurer que vous avez les 2 chiffres requis pour que l'heure soit valide.

1

si vous faites ceci:

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'])); 
} 

ou

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'])); 
} 
Questions connexes