Как узнать, соответствует ли дата интервалу в PHP или MySQL? - PullRequest
3 голосов
/ 10 июня 2011

Допустим, у меня свидание, 16 июня 2011 года в 7:00. Я хочу быть в состоянии проверить, скажем, 5 августа 2011 года в 7:00 и сказать, что это число, кратное 1 дню после первого свидания, тогда как 7:01 не будет учитываться, поскольку это не точный кратный.

Еще один тестовый набор. Допустим, у нас 16 июня 2011 года в 7:00, и я хочу проверить, находится ли конкретная минута в интервале ровно 2 часа с тех пор. Таким образом, 9:00, 11:00, 13:00 и т. Д. Будут учитываться, а 9:30 и 10:00 - нет. И это может продолжаться в течение дней и месяцев - 1 сентября в 7:00 все равно будет считаться каждые 2 часа. (И нет, на данный момент я не знаю, как я буду справляться с DST: D)

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

К сожалению, это на PHP 5.1.

Ответы [ 5 ]

1 голос
/ 10 июня 2011
select *
from test
where datetimefield > '2011-06-16 07:00:00'
and
mod(timestampdiff(second,'2011-06-16 07:00:00',datetimefield),7200) = 0

В этом примере будут показаны все записи, которые больше, чем «2011-06-16 07:00:00», где значение поля кратно двум часам.

1 голос
/ 10 июня 2011

Проще всего было бы преобразовать значения даты / времени в метку времени Unix, а затем просто сделать некоторое вычитание / деление:

2011-06-16 07:00:00 -> 1308229200
2011-08-05 07:00:00 -> 1312549200
2011-08-05 07:00:01 -> 1312549201

1312549200 - 1308229200 = 4320000 / 86400 = 50 (days)
1312549201 - 1308229200 = 4320001 / 86400 = 50.0000115...

Другими словами:

if (($end_timestamp - $start_timestamp) % 864000)) == 0) {
  ... even multiple ...
}

То жебудет держать для сравнения день / неделя.В течение многих месяцев это будет за окном, так как месяцы не очень хорошие, даже цифры, с которыми приходится иметь дело.

0 голосов
/ 10 июня 2011

Вы можете сравнить два объекта DateTime с помощью метода diff () .Результат - объект DateInterval - вы можете проверить точное число дней / часов / минут между двумя датами.

Бесполезно писать свои собственные алгоритмы, если вы можете использовать встроенные функции.

0 голосов
/ 10 июня 2011

Проверьте верхний ответ этой темы для получения информации о функциях PHP, чтобы получить разницу в днях между двумя датами и манипулировать указанными результатами: Рассчитать количество часов между двумя датами в PHP

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

0 голосов
/ 10 июня 2011

MySQL Date функции: http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

  1. Вы можете использовать TIME (), чтобы получить только часть времени даты. Если части времени совпадают, то это точное кратное число.

  2. Для двухчасовой вещи одним из способов было бы получить часть даты в минутах / секундах, убедиться, что они равны, а затем убедиться, что часовые части даты равны или оба странные. Для более сложных целых (например, 5) кратных часов вы можете «подделать» мод, разделив части часа и проверив, является ли результат целым числом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...