在php中获取小时数据

时间:2013-11-26 12:45:20

标签: php mysql sql

我有这样的时间2013-08-12 12:58:14。现在我想要一小时,所以我使用以下代码:

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

所以我得到$hour=12;现在我有一个其他参数$tohour=5(用户定义的值在1到24之间);现在12-5=7表示在时间7 to 12之间获取数据。


另一个例子:

假设时间为2013-08-12 01:15:23$tohour=10 现在这次是在2013-08-11 15:15:232013-08-12 01:15:23之间的数据提取。


那么如何实现呢?我试着解释一下我的问题,但如果不清楚,请让我知道或填写免费编辑我的问题和标题。

4 个答案:

答案 0 :(得分:2)

在MySQL中,

SELECT fields
FROM table
WHERE timefield BETWEEN DATE_SUB('$date', INTERVAL $tohour HOUR) AND '$date' 

答案 1 :(得分:1)

您可以使用strtotime轻松获取from和to时间:

$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";

或者在mysql中:

SELECT
   *
FROM
   `table`
WHERE
    `time` 
BETWEEN
    DATE_ADD('$time',INTERVAL $hour HOUR)
AND
    DATE_ADD('$time',INTERVAL $tohour HOUR)

答案 2 :(得分:0)

在普通的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')
);

但我个人会选择MySQL解决方案。

PS。当然,这个解决方案适用于PHP 5> = 5.3.0

答案 3 :(得分:0)

我更喜欢用PHP做一些计算并使用简单的mysql查询。

$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

然后,我们得到2个日期字符串,用它们做db查询,参见: