我有这样的时间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:23
到2013-08-12 01:15:23
之间的数据提取。
那么如何实现呢?我试着解释一下我的问题,但如果不清楚,请让我知道或填写免费编辑我的问题和标题。
答案 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查询,参见: