Проблема с датой, членство истекло, но это не так - PullRequest
1 голос
/ 07 августа 2010

Мне нужно изменить мой действительный сценарий уведомлений (который уведомляет участников до истечения срока действия членства, в день истечения срока действия и т. Д.), Чтобы он работал определенным образом.

Таким образом, мой столбец expires в базе данных (MySQL)Тип datetime, поэтому значение в нем, например, выглядит следующим образом: 2010-08-08 13: 46: 38

Вот что:

Скрипт может быть вызван из бэкэнда в любое время, и оножидать от пользователя ввода числа, например 1, что означает, что все участники, срок действия которых истекает завтра (в любое время), должны быть уведомлены.Поэтому, если скрипт вызывается по адресу: 2010-07-08 00:00:05, все участники, срок действия которых истекает с 2010-08-08 00:00:00 до 2010-08-08 23:59:59, должны быть уведомлены.или другими словами, все члены, срок действия которых содержит 2010-08-08.

Я использую ZendFramework для этого, но я думаю, что я также буду обрабатывать код MySQL.Я также считаю, что вы понимаете, что я имею в виду под этим постом, и чего я хочу достичь ...

Мой код, который не работает нормально (для этого подхода), выглядит следующим образом:

$d = new Zend_Db_Expr("DATE_ADD(NOW(), INTERVAL $days DAY)");

$days2 = $days-1;
$d2 = new Zend_Db_Expr("DATE_ADD(NOW(), INTERVAL $days2 DAY)");
return $this->fetchAll("status='1' AND expires <= $d AND expires >=$d2");

1 Ответ

0 голосов
/ 07 августа 2010

Чтобы получить начало и конец завтрашнего временного окна, как насчет использования CURRENT_DATE () или CURDATE () , например,

DATE_ADD(CURRENT_DATE(), INTERVAL $days DAY )
DATE_ADD(CURRENT_DATE(), INTERVAL $days2 DAY )

, что даст вам

+-------------------------------------------+-------------------------------------------+
| DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY ) | DATE_ADD(CURRENT_DATE(), INTERVAL 2 DAY ) |
+-------------------------------------------+-------------------------------------------+
| 2010-08-08                                | 2010-08-09                                | 
+-------------------------------------------+-------------------------------------------+

Вам нужно немного подправить неравенство:

------- use less-than instead of less-than-or-equal.
expires < $d AND expires >=$d2
...