Проверка даты mySql старше 1 дня от php now () - PullRequest
7 голосов
/ 19 июня 2010

У меня есть запись, возвращенная из MySQL, которая имеет поле datetime. То, что я хочу сделать, это взять это значение и посмотреть, если оно старше 24 часов, я предполагаю, что PHP time () для получения текущего времени.

В настоящий момент, если я повторяю их, я получаю:

 1276954824            this is php's time()
 2010-06-19 09:39:23   this is the MySQL datetime

Полагаю, верхний - это время Unix? Играли с strtotime, но без особого успеха ..

Любая помощь приветствуется!

Ответы [ 4 ]

27 голосов
/ 19 июня 2010

Нет успеха?

echo strtotime("2010-06-19 09:39:23");

дает мне

1276940363

(mktime(9, 39, 23, 6, 19, 2010) дает то же время, поэтому синтаксический анализ работает правильно)


Чтобы получить разницу в секундах, вы можете вычесть временные метки, например,

$diff = time() - strtotime("2010-06-19 09:39:23");

Если разница больше 86400 (60 * 60 * 24) секунд, тогда временные метки большекроме одного дня:

if(time() - strtotime("2010-06-19 09:39:23") > 60*60*24) {
   // timestamp is older than one day
}
9 голосов
/ 19 июня 2010

Вы также можете сделать:

SELECT * FROM my_table WHERE timestamp < NOW() - INTERVAL 1 DAY;
3 голосов
/ 19 июня 2010

Почему вы смешиваете время PHP и время MySQL?

Вместо этого выполните сравнение непосредственно в MySQL:

Чтобы получить текущую дату / время в MySQL, используйте функцию NOW().Вы можете сравнить, например, 2010-06-19 09:39:23' < DATE_SUB(NOW(), INTERVAL 1 DAY)

. Это позволит проверить, не старше ли заданная дата (предположительно в столбце), чем 24 часа.Отметка времени MySQL для отметки времени UNIX, для этого можно использовать функцию UNIX_TIMESTAMP() MySQL.

0 голосов
/ 03 июля 2013

Я написал функцию, с помощью которой вы можете определить, является ли первая заданная дата одним днем ​​или n дней больше или меньше второй заданной даты.

$date1 = "2013/03/01";
$date2 = "2013/03/01";
$sign  = "-";
$diff  = 1;
$result = isDaysSmallerBigger($date1, $date2, $sign, $diff);
var_dump($result);

/**
 * Note: this function is only supported in php 5.3 or above
 * 1. If $date1 - $date2 = $sign $diff days, return true;
 * 2. If $date1 equals $date2 and $diff euqals 0, whether $sign is "+" or "-", return true
 * 3. Else return false; 
 * @param unknown_type $date1
 * @param unknown_type $date2
 * @param string $sign: "-": $date1 < $date2; "+": $date1 > $date2; 
 * Besides if $diff is 0, then both "-" and "+" means $date1 === $date2;
 * @param integer $diff: date difference between two given dates
 */
function isDaysSmallerBigger($date1, $date2, $sign, $diff) {
    $dateTime1 = new DateTime($date1);
    $dateTime2 = new DateTime($date2);

    $interval = $dateTime2->diff($dateTime1);
    $dayDiff  = $interval->format('%a');
    $diffSign = $interval->format('%R'); 

    if((int)$dayDiff === (int)$diff) {
        // Correct date difference

        if((int)$diff !== 0) {
          // Day difference is not 0
          if($diffSign === $sign) {
            return true;
          } else {
            return false;
          }
        } else if((int)$diff === 0) {
          // Day difference is 0, then both given "+" and "-" return true
          return true;
        } 
    } else {
        // Incorrect date difference
        return false;   
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...