2010-06-12 4 views
0

Fondamentalement, ce que je veux faire est d'envoyer un e-mail de suivi sur la commande passée dans les 3 heures plus tard. Ce que j'essaie de faire est d'obtenir la date actuelle (jusqu'au niveau des heures), puis comparez avec le orderdate + 3 heures, pour voir si elle correspond.php ajouter des heures à la date de sortie mauvais résultat

Exemple OrderDate: 2010-06-12 18, après ajouter 3 heures devraient être 2010-06-12 21

Cependant, après ajouter heures, le résultat final deviennent parfois plus, parfois deviennent plus petits ... quelque chose faux.

$now= date('Y-m-d H'); 
echo $now . "<br>"; 


... 
... 

while ($data = mysql_fetch_array ($result)) 
{ 
$orderid = $data['orderid']; 
$orddate = $data['orddate']; 
$corddate= date('Y-m-d H:i:s', $orddate); 


$year = substr ($corddate, 0, 4); 
$month = substr ($corddate, 5, 2); 
$day = substr ($corddate, 8, 2); 
$hour = substr ($corddate, 11, 2); 
$actualorderdate= $year . "-" . $month . "-" . $day . " " . $hour; 


$new_time = mktime ($hour+3, 0, 0, $month, $day, $year); 
$year = date ('Y', $new_time); 
$month = date ('m', $new_time); 
$day= date ('d', $new_time); 
$hour= date ('h', $new_time); 
$xhourslater= $year . "-" . $month . "-" . $day . " " . $hour; 


echo "actualorderdate: ". $actualorderdate. " xhourslater: " . $xhourslater. "<br>"; 

if($now==$xhourslater) 
{ 
    echo "now is 3 hours later" . "<br>"; 
    //send email follow up, then update status as sent, in order not to resend anytime in the 3rd hour. 

} 


} 

Répondre

1

Il me semble que vous faites beaucoup d'analyse excessive pour rien.

$orddate = $data['orddate']; 
$actualOrderDate = date('Y-m-d H:i:s', $orddate); 
$timeToSendEmail = date('Y-m-d H:i:s', strtotime('+3 hours', $orddate)); //Assuming $orddate is a timestamp int. If not, you'll have to do some calculations or something there, possibly using date() again. 

Fondamentalement, vous voulez juste avoir le temps de commande + 3 heures, alors utilisez la fonction de php strtotime de (http://php.net/manual/en/function.strtotime.php). Très utile.

Si ce n'est pas ce que vous voulez, s'il vous plaît poster quelques données de test afin qu'il soit plus facile de comprendre ce qui pourrait être funky.

0

je crois qu'il est plus simple de

$date_now = date("Y-m-d g:i a"); // get the date 
$time_now = time($date_now); // convert it to time 
$time_next = $time_now + 3 * 60 * 60; // add 3 hours (3 x 60mins x 60sec) 
$date_next = date("Y-m-d H", $time_next); // convert it back to date 
Questions connexes