2012-06-21 2 views
-1

Я хочу рассчитать время между двумя установленными временами (запуск задания Cron 1 час, каждый час).Рассчитать Если было меньше или больше 24 часов, используя PHP

EG:

2:18 вечера по 20/06/2012 3:00 вечера на 21/06/2012 * Работает Cron Job, более 24 часов

Как бы я вычисляю это PHP для выполнения задачи, которую я буду развивать позже.

Сценарий Я попытался:

define("SECONDS_PER_HOUR", 60*60); 
date_default_timezone_set('UTC'); 

$result = mysql_query("SELECT * FROM tickets") or die(mysql_error()); 

while($row = mysql_fetch_array($result)) { 
    // Calculate the start time 
    $str = $row['openTime'] . " " . $row['openDate']; 

    $startdatetime = strtotime($str); 

    $enddatetime = time(); 

    // calculate the difference in seconds. 

    $difference = $enddatetime - $startdatetime; 

    $hoursDiff = $difference/SECONDS_PER_HOUR; 

    $minutesDiffRemainder = $difference % SECONDS_PER_HOUR; 

    echo $row['ticketID'] . ": " . $hoursDiff . "h " . $minutesDiffRemainder . "m<br />"; 
} 
+2

Вы пробовали что-нибудь? – lanzz

+0

конечный результат: MFT-252224: 74.5166666667h 1860m MFT-768337: 18.4333333333h 1560m MFT-848286: -7.81666666667h -2940m MFT-70960: -0.0075h -27m MFT-543912: -0.0075h -27m MFT-512905: -0.0075h -27m MFT-496896: -0.0075h -27m MFT-879190: -0.0075h -27m – user1471191

+0

Kris, я немного отредактировал ваш код, используйте 'date_default_timezone_set' рано на вершине, так как его конфигурация , Затем сначала отформатируйте строку, затем запустите 'strtotime'. И во второй раз вы могли бы избавиться, просто используя 'time()'. Теперь осталось только разделить две временные метки UNIX, которые были заданы перед небольшим поиском, чтобы раскрыть ее быстро. – hakre

ответ

0

Рассматривали ли вы на самом деле делает запрос, который делает то, что вам нужно, и не тянуть все данные и делать сравнения в PHP? Вы могли бы сделать

SELECT * from TICKETS WHERE DATE_ADD(open time, INTERVAL 24 HOUR) > CURTIME();

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

+0

SELECT * from TICKETS WHERE DATE_ADD (время открытия, INTERVAL 24 HOUR)> CURTIME(); С помощью этого, каким должен быть мой ввод, как у меня есть дата(), или я должен позволить MySQL сделать это автоматически? – user1471191

+0

Ну, если имеет смысл не устанавливать дату в приложении, вы можете просто использовать CURTIME() (или NOW()) при вставке. Это позаботится о деталях; вы можете даже иметь по умолчанию столбец. Помните, что это также имеет дополнительное преимущество для сравнения временных меток от одной и той же системы: вы всегда работаете во время базы данных. Чаще всего, время суток задействованных систем достаточно схожи, но могут быть времена, когда они дрейфуют друг от друга. Затем 24 часа сравниваются с «правильным» значением (временная метка). –

Смежные вопросы