Я пытаюсь отправить автоматические письма по метке времени. У меня есть набор временных меток 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';
}
};
Предполагая, что поля 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);
...
Почему бы вам не изменить свой первый SQL-запрос, чтобы выбрать только записи с столбцом временной метки меньше текущего времени минус 15 минут в секундах?