0

I have a time like this 2013-08-12 12:58:14. Now I want hour so I use following code:

$date = "2013-08-12 12:58:14";
$date = strtotime($date);
$hour = date('H', $date);

So I get $hour=12; now I have a other parameter $tohour=5 (it is user defined which value is between 1 to 24); now 12-5=7 means fetch data between time 7 to 12.


Another example:

Suppose time is 2013-08-12 01:15:23 and $tohour=10.
Now this time the data fetch between 2013-08-11 15:15:23 to 2013-08-12 01:15:23.


So how to achieve it? I try to explain my question, but if it is not clear, please let me know or fill free to edit my question and title too.

Glavić
  • 42,781
  • 13
  • 77
  • 107
DS9
  • 2,995
  • 4
  • 52
  • 102

4 Answers4

2

In MySQL,

SELECT fields
FROM table
WHERE timefield BETWEEN DATE_SUB('$date', INTERVAL $tohour HOUR) AND '$date' 
Ramesh
  • 4,223
  • 2
  • 16
  • 24
1

You can easily get the from and to times using strtotime:

$baseTime = strtotime('2013-08-12 01:15:23');
$from = strtotime('+'.$hour.' hours',$basetime);
$to = strtotime('+'.$tohour.' hours',$basetime);
echo "From: ".date("Y-m-d H:i:s",$from)."\n";
echo "To: ".date("Y-m-d H:i:s",$to)."\n";

Or in mysql:

SELECT
   *
FROM
   `table`
WHERE
    `time` 
BETWEEN
    DATE_ADD('$time',INTERVAL $hour HOUR)
AND
    DATE_ADD('$time',INTERVAL $tohour HOUR)
Jesper Blaase
  • 2,320
  • 16
  • 13
  • i try your query,it's look like `SELECT * FROM cdr where calldate BETWEEN DATE_ADD('2012-08-29 23:00:00',INTERVAL 23 HOUR) AND DATE_ADD('2012-08-29 23:00:00',INTERVAL 5 HOUR)` but it didnot fetch data . – DS9 Nov 26 '13 at 13:26
  • in database, data is between `2012-08-29 21:18:23` to `2012-08-29 21:49:23`. – DS9 Nov 26 '13 at 13:28
  • That basically translates to this query: SELECT * FROM cdr WHER calldate BETWEEN '2012-08-30 22:00:00' AND '2012-08-30 04:00:00' Is that what you want? – Jesper Blaase Nov 26 '13 at 13:29
0

In plain PHP:

$toHour = 10;
$dateTo = \DateTime::createFromFormat('Y-m-d H:i:s', '2013-08-12 12:58:14');
$dateFrom = clone $dateTo;
$dateFrom->sub(new \DateInterval('PT'.$toHour.'H'));
var_dump(
    'From: ' . $dateFrom->format('Y-m-d H:i:s'),
    'To: ' . $dateTo->format('Y-m-d H:i:s')
);

But personally I would go with MySQL solution.

PS. Ofcourse this solution is for PHP 5 >= 5.3.0

Bartosz Grzybowski
  • 1,149
  • 8
  • 18
0

I prefered to do some compute in PHP and use simple mysql query.

$timeEnd = '2013-08-12 01:15:23';
$toHour = 10;

$timeStart = date('Y-m-d H:i:s', strtotime($timeEnd) - $toHour * 3600);

echo "Fetch data between $timeStart to $timeEnd";
// Result: Fetch data between 2013-08-11 15:15:23 to 2013-08-12 01:15:23

Then, we got 2 date string, do db query with them, see:

Community
  • 1
  • 1
Fwolf
  • 671
  • 4
  • 8