Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中获取小时之间的数据_Php_Mysql_Sql - Fatal编程技术网

在php中获取小时之间的数据

在php中获取小时之间的数据,php,mysql,sql,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到12之间提取数据 另一个例子: 假设时间是2013-08-12 01:15:23和$tohour

我有一段这样的时光
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到12之间提取数据


另一个例子:

假设时间是
2013-08-12 01:15:23
$tohour=10

现在,这一次数据获取介于
2013-08-11 15:15:23
2013-08-12 01:15:23
之间



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

您可以使用strotime轻松获取往返时间:

$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)

使用strotime,您可以轻松获取往返时间:

$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)

使用strotime,您可以轻松获取往返时间:

$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)

使用strotime,您可以轻松获取往返时间:

$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)
在MySQL中

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

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

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

SELECT fields
FROM table
WHERE timefield BETWEEN DATE_SUB('$date', INTERVAL $tohour HOUR) AND '$date' 
在普通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解决方案

当然,这个解决方案是针对普通PHP中的PHP5>=5.3.0的:

$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解决方案

当然,这个解决方案是针对普通PHP中的PHP5>=5.3.0的:

$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解决方案

当然,这个解决方案是针对普通PHP中的PHP5>=5.3.0的:

$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解决方案


当然,这个解决方案是针对PHP5>=5.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查询,请参见:


我更喜欢用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查询,请参见:


我更喜欢用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查询,请参见:


我更喜欢用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查询,请参见:




数据库中是否有带时间戳的表?是的,我有带时间戳的表。数据库中是否有带时间戳的表?是的,我有带时间戳的表。数据库中是否有带时间戳的表?是的,我有带时间戳的表。数据库中是否有带时间戳的表?是的,我有一张带有时间戳的表。您的
$todate
值是多少?您的意思是
$tohour
?呃,在3和0之间选择1;->0是真的。当我交换它时,此查询有效,请更新它。感谢您的帮助。您的
$todate
值是多少?您的意思是
$tohour
?呃,在3和0之间选择1;->0是真的。当我交换它时,此查询有效,请更新它。感谢您的帮助。您的
$todate
值是多少?您的意思是
$tohour
?呃,在3和0之间选择1;->0是真的。当我交换它时,此查询有效,请更新它。感谢您的帮助。您的
$todate
值是多少?您的意思是
$tohour
?呃,在3和0之间选择1;->0ya true..当我交换它时,此查询有效,请更新它。感谢您的帮助。我尝试您的查询,它看起来像
SELECT*FROM cdr,其中calldate介于DATE\u ADD('2012-08-29 23:00:00',INTERVAL 23小时)和DATE\u ADD('2012-08-29 23:00',INTERVAL 5小时)
之间,但它没有获取数据。在数据库中,数据介于
2012-08-29 21:18:23
2012-08-29 21:49:23
之间。这基本上可以转化为这个查询:从cdr中选择*当调用日期介于'2012-08-30 22:00:00'和'2012-08-30 04:00:00'之间时,这就是您想要的吗?我尝试了您的查询,它看起来像是从cdr中选择*在日期之间添加调用日期('2012-08-29 23:00:00',间隔23小时)和日期(2012-08-29 23:00:00',间隔5小时)
但它没有提取数据。在数据库中,数据介于
2012-08-29 21:18:23
2012-08-29 21:49:23
之间。这基本上可以转换为这个查询:从cdr中选择*当调用日期介于'2012-08-30 22:00:00'和'2012-08-30 04:00:00:00'之间时,这是您想要的吗?我尝试了您的查询,它看起来像是从cdr中选择*日期添加('2012-08-29 23:00:00',间隔23小时)和日期添加('2012-08-29 23:00:00',间隔5小时)之间的日期但它没有提取数据。在数据库中,数据介于
2012-08-29 21:18:23
2012-08-29 21:49:23
之间。这基本上可以转换为这个查询:从cdr中选择*当调用日期介于'2012-08-30 22:00:00'和'2012-08-30 04:00:00:00'之间时,这是您想要的吗?我尝试了您的查询,它看起来像是从cdr中选择*日期添加('2012-08-29 23:00:00',间隔23小时)和日期添加('2012-08-29 23:00:00',间隔5小时)之间的日期但它没有获取数据。在数据库中,数据介于
2012-08-29 21:18:23
2012-08-29 21:49:23
之间。这基本上就是这个查询:从cdr中选择*调用日期在'2012-08-30 22:00:00'和'2012-08-30 04:00:00'之间,这就是您想要的吗?