2012-02-25 1 views
0

J'ai un problème avec le temps de calcul en PHP. Il est un script simple: lorsqu'un temps est donné (dateNow), une livraison immédiate de la fonction évalue:php4 erreur de calcul du temps

  1. si elle est < 10 heures -> il affiche aujourd'hui à 12h30
  2. si elle est < 14Pm - > il affiche nous ne pouvons pas prendre l'ordre
  3. et si ce ne sont pas ci-dessus -> il affiche demain à 12:30

Je php 4.4.9 sur mon serveur, date_default_timezone_set ne fonctionne pas , donc je dois utiliser gmdate et calculer le décalage. Quand je mets tout le script, il sort la veille (il utilise le servertime qui n'est pas mon fuseau horaire actuel). C'est le code. Merci pour toute aide.

<?php 
$gmt = -3; 
$datenow = gmdate("d-m-Y H:i:s", mktime(date("H")+ $gmt, date("i"), date("s"), date("m"), date("d"), date("Y"))); 
$date = strtotime($datenow); 

function ordertime ($when) 
{ 
    global $date ; 
    $datearray = strtotime($when); 
    if ($datearray['hours'] < 10) { 
     // order ships today 
     return strtotime("today 12:30"); 
    } 
    elseif ($datearray['hours'] < 14) { 
     // we can't take this order 
     echo "we can't take this order"; 
    } else { 
     // order ships tomorrow 
     return strtotime("tomorrow 12:30"); 
} 
} 
// date_default_timezone_set("America/Argentina/Buenos_Aires"); // this does not work on php4.4.9 

$delivery = ordertime($date); 
if ($delivery) { 
    $deliverytime = strftime("%d-%m-%Y %H:%M:%S", $delivery); 
    echo $datenow."<br />"; 
    echo $deliverytime; 
}?> 

Ce qui me donne cette sortie

OUTPUT 
25-02-2012 03:46:22 
24-02-2030 12:30:00 

J'ai ai fait tout le suggère la correction Kolink. J'ai enlevé le deuxième paramètre dans return strtotime parce qu'il me donne une sortie de 05-08-2030 12:30:00. Et si je supprime getdate, j'ai la même sortie en php5.

Répondre

0

Essayez de passer $datenow comme deuxième paramètre à strtotime(). Cela devrait faire le "aujourd'hui" ou "demain" par rapport à l'heure correcte, et résoudre votre problème.

+0

Il va résoudre le problème, mais la fonction de commande serait inutile. Le point entier est d'utiliser la fonction – chenci

+0

que je veux dire dans les valeurs 'return' dans votre fonction' ordertime'. C'est de là que vient le problème. –

+0

Il sort ce 31-12-1969 12:30:00, très bizarre – chenci