Диапазон дат в PHP? - PullRequest
       20

Диапазон дат в PHP?

0 голосов
/ 09 марта 2009

У меня есть база данных, созданная сторонним поставщиком, для которой я сейчас пишу новый пользовательский интерфейс.

БД хранит время начала события как метки времени Unix (в GMT). Что мне нужно сделать, это запросить это за один день. По-видимому, мне просто нужно сделать:

SELECT * WHERE start > $last_night_at_midnight AND start < $tonight_at_midnight

Проблема, с которой я сталкиваюсь, заключается в простом способе объединения функций даты / времени в PHP для создания этих переменных. Такое ощущение, что все, что я делаю, слишком сложно для такой простой процедуры.

У кого-нибудь есть простое решение для этого?

Приветствия

Ответы [ 7 ]

6 голосов
/ 09 марта 2009

Проверьте PHP strtotime () для преобразования времени из простого английского языка в unix.

Это позволяет вам использовать «сегодня полночь» и «завтра полночь» и другие подобные конструкции, как демонстрирует Паоло Бергантино.

5 голосов
/ 09 марта 2009

strtotime - самая удивительная функция времени PHP в истории.

$last_night_at_midnight = strtotime("today midnight");
$tonight_at_midnight = strtotime("tomorrow midnight");
4 голосов
/ 10 марта 2009

Это действительно обратный способ сделать это, но если вам нужно иметь возможность создавать различные диапазоны дат, не только сегодня или один день, вы можете комбинировать нечетные функции времени / даты обоих языков и использовать: 1001 *

$php_start = strtotime("Some valid date expression");
$php_end = strtotime("Some other valid date expression");

$result = my_sql_query("
          Select * FROM someDB 
          WHERE DATE(FROM_UNIXTIME(date_column)) 
          BETWEEN FROM_UNIXTIME($php_start) AND FROM_UNIXTIME($php_end)");

использование DATE () в запросе гарантирует, что sql не утруждает себя просмотром временной части данных, а использование FROM_UNIXTIME для всех трех означает, что сервер sql согласован в том, как он получает даты.

Мой любимый способ получить диапазон дат только на сегодняшний день:

  $today_start = strtotime("today");
  $today_end = strtotime("+1 day", $today_start);

strtotime на самом деле лучше, я обнаружил, затем добавив 86400 или что-то в этом роде, потому что strtotime лучше обрабатывает DST. Обнаружил это на прошлой неделе.

3 голосов
/ 09 марта 2009

strtotime полезен здесь ...

$t1=strtotime("today");
$t2=strtotime("tomorrow");

$sql="select * from foo where timecol between $t1 and $t2";

На момент написания (09-03-2009 19:06), сегодня приравнивается к 09-03-2009 00:00:00, а завтра приравнивается к 10-03-2009 00: 00: 00

1 голос
/ 09 марта 2009

Если вам нужно выбрать произвольные дни, используйте gmmktime

0 голосов
/ 09 марта 2009

Вы можете создать эти переменные в PHP или в Mysql ...

$tonight_at_midnight    = mktime(0,0,0);
$last_night_at_midnight = $tonight_at_mindnight - 86400; 

Другая возможность в SQL:


SELECT * FROM tbl1 WHERE start > UNIX_TIMESTAMP(DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
AND start < UNIX_TIMESTAMP(CURDATE())

(не тестировалось)

0 голосов
/ 09 марта 2009

Здесь может быть полезна функция time () в PHP: http://be2.php.net/manual/en/function.time.php

Более конкретно, пример, приведенный на этой странице, вероятно, скажет вам, что вам нужно знать. Посмотрите на 3-е утверждение эха

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