Как узнать, что дата позже 8 дней? - PullRequest
3 голосов
/ 08 июля 2010

у меня есть строковое поле (и я не могу изменить это, потому что формат даты) в базе данных mysql, которая содержит дату (например: "01-03-2010"), и я хочу ' t создать функцию для сравнения этой даты и возврата true, если сегодняшняя дата новее 8 дней, и false, если дата ниже или больше сегодняшней даты ...

Пример:

01-03-2010 < (08-06-2010(Today) - 8days) - return true
01-06-2010 < (08-06-2010(Today) - 8days) - return false
31-05-2010 < (08-06-2010(Today) - 8days) - return true

я знаю, что могу преобразовать строку "01-03-2010" в метку времени с помощью функции strtotime() в PHP, но я не знаю, как удалить 8 дней из сегодняшней метки времени ...: s

Заранее спасибо

Ответы [ 8 ]

10 голосов
/ 08 июля 2010

strtotime(time_str) < strtotime("-8 day")

3 голосов
/ 08 июля 2010

удалить 8 дней в php вы можете:

$date_less_8 = time() - (8*24*60*60);

Вы можете проверить в запросе MySQL, как:

DayDate < DATE_SUB(CONCAT(CURDATE(), ' 00:00:00'), INTERVAL 8 DAY)
2 голосов
/ 08 июля 2010
1 голос
/ 08 июля 2010

Это все еще может быть обработано внутри MySQL с использованием функции STR_TO_DATE(string, format):

SELECT 
  *, STR_TO_DATE(dateColumn, '%d-%m-%y') < CURDATE() - INTERVAL 8 DAY as eightdaysold 
FROM myTable
1 голос
/ 08 июля 2010
$newDate = strtotime('31-05-2010'.' -8 days');
echo date('d-F-Y',$newDate);

$eightdaysagoDate = strtotime('-8 days');
echo date('d-F-Y',$eightdaysagoDate);
0 голосов
/ 08 июля 2010

С PHP> = 5.3 вы можете использовать новый блестящий объект DateTime (http://fr2.php.net/manual/fr/datetime.modify.php):

$date_from_mysql = new DateTime(/*put your date from mysql here, format yyyy-mm-dd*/);

$date_today = new DateTime();

$date_8_days_ago = new DateTime()
$date_8_days_ago->modify("-8 days");

if(($date_8_days_ago <= $date_from_mysql) && ($date_from_mysql <= $date_today)) {
  /* your date from mysql is between today and 8 days ago */
} else if($date_from_mysql <= $date_8_days_ago) {
  /* your date from mysql is before 8 days ago */
} else {
  /* your date is in the future */
}
0 голосов
/ 08 июля 2010

Я склонен использовать эти определения в моих приложениях:

//Time Settings
if(!defined('SECOND'))  define('SECOND',  1);
if(!defined('MINUTE'))  define('MINUTE',  60  * SECOND);
if(!defined('HOUR'))      define('HOUR',    60  * MINUTE);
if(!defined('DAY'))    define('DAY',     24  * HOUR);
if(!defined('WEEK'))      define('WEEK',     7  * DAY);
if(!defined('MONTH'))     define('MONTH',   30  * DAY);
if(!defined('YEAR'))      define('YEAR',    365 * DAY);

Затем

if($user_time < (time() - (DAY*8)))
{
   //Whoopsie
}
0 голосов
/ 08 июля 2010

проверка TO_DAYS из mysql

TO_DAYS(DATE) - TO_DAYS('2010-03-01')) < 8
...