Массив времени найти тот, который за 15 минут до установленного времени

0

Я пытаюсь отправить автоматические письма по метке времени. У меня есть набор временных меток unix в БД. Я тяну их, а затем пытаюсь сравнить их друг с другом. Часть, которая ломается в конце. Foreach не возвращает правильные идентификаторы eblast. Я думаю, что я правильно вычитаю временные метки unix, но я не уверен. Я хочу, чтобы оператор if работал только в том случае, если метка времени из БД составляет 15 минут до момента времени. Я только хочу, чтобы он срабатывал, если его в любое время до 15 минут временной метки из БД. Если после метки времени из БД ничего не делать. Надеюсь, это имеет смысл.

session_start();
date_default_timezone_set('America/Chicago');

error_reporting(E_ALL);
include 'DB.php';

$timestamp = time();

echo 'Timestamp:';
echo $timestamp;
echo '------';

$drop_dead = mysql_query("SELECT due_date, ID FROM eblasts") or die(mysql_error());

while ($row = mysql_fetch_array($drop_dead, MYSQL_NUM)) {
        $final_email_id[$row[1]] = $row[0];
};

//this is the ID of eblasts that need an email sent based on their drop_dead NOT on warning1, warning2 and due_date.
print_r($final_email_id);

foreach($final_email_id as $key => $value) {
 $query = mysql_query("SELECT warning_1 FROM eblasts WHERE ID = '$key'") or die(mysql_error());
 $find_warning_1 = mysql_fetch_row($query);
 $warning_1[$key] = $find_warning_1[0];
}
//this is the warning_1 numbers where the ID of the array are the ID of the eblast.
print_r($warning_1);

foreach($final_email_id as $key => $value) {
 $query = mysql_query("SELECT warning_2 FROM eblasts WHERE ID = '$key'") or die(mysql_error());
 $find_warning_2 = mysql_fetch_row($query);
 $warning_2[$key] = $find_warning_2[0];
}

//this is the warning_2 numbers where the ID of the array are the ID of the eblast.
print_r($warning_2);

foreach($final_email_id as $key => $value) {
 $query = mysql_query("SELECT due_date FROM eblasts WHERE ID = '$key'") or die(mysql_error());
 $find_due_date = mysql_fetch_row($query);
 $due_date[$key] = $find_due_date[0];
}

//this is the due date numbers where the ID of the array are the ID of the eblast.
print_r($due_date);

//Add 900 because its 15 minutes in seconds ... 
$run_time = $timestamp + 900;

foreach($warning_1 as $key => $value){
 $diff_time = $run_time - $warning_1[$key];
 echo '-----';
 echo $diff_time;
 echo '-----';
 if($diff_time < 900 && $diff_time > 0){
 echo 'different';
 echo $diff_time;
 $_SESSION['eblast_id'] = $key;
 include 'warning_1.php'; 
 }
};
Теги:
datetime

2 ответа

1
Лучший ответ

Предполагая, что поля warning_x являются отметками времени, это должно сделать трюк:

$timestamp = time();

$query = sprintf(
    'SELECT id, warning_1' .
     ' FROM eblast' .
    ' WHERE (UNIX_TIMESTAMP(warning_1) - %u) BETWEEN 1 AND 899',
    $timestamp
);

while ($row = mysql_fetch_array($query, MYSQL_NUM)) {
    $ids[$row[0]] = $row[1];
};

var_dump($ids);
...
  • 0
    Хорошо - НО, где сервер mysql и сервер, на котором запущена БД, не находятся в одном часовом поясе И я установил часовой пояс для CST в начале сценария ... разве это не чушь?
  • 0
    Да, это может вызвать некоторые проблемы, в зависимости от конфигурации БД. Я обновил свой пост, чтобы отразить это.
Показать ещё 2 комментария
0

Почему бы вам не изменить свой первый SQL-запрос, чтобы выбрать только записи с столбцом временной метки меньше текущего времени минус 15 минут в секундах?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню