php добавить часы к дате вывод неправильный результат - PullRequest
0 голосов
/ 12 июня 2010

По сути, я хочу отправить электронное письмо, чтобы узнать о заказе, размещенном через 3 часа.

Я пытаюсь получить текущую дату (до уровня часов), а затем сравнить с датой заказа + 3 часа, чтобы определить, совпадает ли она.

Пример даты заказа: 2010-06-12 18, после добавления 3 часа должно стать 2010-06-12 21

Однако, через час, конечный результат иногда становится больше, иногда становится меньше ... что-то не так.

$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.

 }


}

Ответы [ 2 ]

1 голос
/ 12 июня 2010

Мне кажется, что вы делаете много лишних разборов впустую.

$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.

По сути, вы просто хотите иметь время заказа + 3 часа, поэтому используйте php's strtotime (Функция http://php.net/manual/en/function.strtotime.php). Очень полезная.

Если это не то, что вам нужно, пожалуйста, опубликуйте некоторые тестовые данные, чтобы было легче выяснить, что может быть забавным.

0 голосов
/ 12 июня 2010

Я считаю, что проще

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...