如何使用mysql计算两个日期之间的时间差

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用mysql计算两个日期之间的时间差相关的知识,希望对你有一定的参考价值。

mysql计算两个日期时间的差函数:
第一种:TIMESTAMPDIFF函数,需要传入三个参数,第一个是比较的类型,可以比较FRAC_SECOND、SECOND、 MINUTE、 HOUR、 DAY、 WEEK、 MONTH、 QUARTER或 YEAR几种类型,第二个和第三个参数是待比较的两个时间,比较是后一个时间减前一个时间,具体用法如下:

[sql] view plain copy
SELECT TIMESTAMPDIFF(DAY,'2012-10-01','2013-01-13');
返回结果是104,这里比较的是两个时间的天数差;

[sql] view plain copy
SELECT TIMESTAMPDIFF(MONTH,'2012-10-01','2013-01-13');

这里比较的是两个时间的月份,返回的结果是3;

第二种方法: DATEDIFF函数,就传入两个日期函数,比较的DAY天数,第一个参数减去第二个参数的天数值,具体用法如下:

[sql] view plain copy
SELECT DATEDIFF('2013-01-13','2012-10-01');
返回的结果也是104。

另外其它的日期函数,
now()函数返回的是当前时间的年月日时分秒,如:2008-12-29 16:25:46
CURDATE()函数返回的是年月日信息: 如:2008-12-29
CURTIME()函数返回的是当前时间的时分秒信息,如:16:25:46
另外,如果我们想对一个包含年月日时分秒日期格式化成年月日日期,可以使用DATE(time)函数,如
DATE(now()) 返回的是 2008-12-29
参考技术A 可以转换时间戳相减结果转换回去即可

如何使用 datepicker、ajax、php、mysql 在两个日期之间生成报告?

【中文标题】如何使用 datepicker、ajax、php、mysql 在两个日期之间生成报告?【英文标题】:how generate report between the two dates using datepicker,ajax,php,mysql.? 【发布时间】:2015-02-17 02:53:58 【问题描述】:

我的任务是使用 datepicker、ajax、php 和 mysql 在两个给定日期之间生成报告。下面是我的html:

按日期报告

        From date: <input type="text" id="fromdate" value="">   To date: <input type="text" id="todate" value="" onChange="showuser(document.getElementById('fromdate').value,document.getElementById('todate').value)">  
        <br>
        <div id="txtHint"><b>User informathions will be listed here.</b></div>

脚本:

<script>
  $(function() 
    $( "#fromdate" ).datepicker();
    $( "#todate" ).datepicker();
  );
  </script>

<script type="text/javascript">
function showUser(fromdate,todate)

  if (fromdate =="" && todate=="")
    
     document.getElementById("txtHint").innerHTML="";
     return;
     

    if (window.XMLHttpRequest)
     // code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
     
  else
    // code for IE6, IE5
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    

  xmlhttp.onreadystatechange=function()
    
     if (xmlhttp.readyState==4 && xmlhttp.status==200)
      
        document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
      
    
    xmlhttp.open("GET","bet_date.php?fromdate="+fromdate+"&todate="+todate,true);
    xmlhttp.send();

</script>

这是应该生成报告的 php 文件: bet_date.php

include("database.php"); 
$fromdate=$_GET["fromdate"];
$todate=$_GET["todate"];
 $sql = "SELECT * FROM bookings WHERE date between '$fromdate' and '$todate'";
 $result = mysql_query($sql);

 echo "<table border='1'>
<tr>
<th>id</th>
<th>date</th>
<th>start</th>
<th>name</th>
<th>email</th>
<th>phone</th>
<th>comments</th>
<th>approved</th>
</tr>";

while($row = mysql_fetch_array($result))
  
  echo "<tr>";
  echo "<td>" . $row['id'] . "</td>";
  echo "<td>" . $row['date'] . "</td>";
  echo "<td>" . $row['start'] . "</td>";
  echo "<td>" . $row['name'] . "</td>";
  echo "<td>" . $row['email'] . "</td>";
   echo "<td>" . $row['phone'] . "</td>";
    echo "<td>" . $row['comments'] . "</td>";
     echo "<td>" . $row['approved'] . "</td>";
  echo "</tr>";
  
echo "</table>";

问题是当我选择两个日期时,什么都没有发生。 在这种情况下请帮助我。 简单的例子将不胜感激。 谢谢。

【问题讨论】:

如果两个日期都存在,php 是否返回一些东西? DB 对这两种情况都有记录? 是的数据库中有记录。 用phpMyAdmin之类的数据库管理工具试过查询吗? 是的,我在 phpMyadmin 中使用:SELECT * FROM bookings WHERE date between '2014-12-09' 和 '2014-12-13' 并正确返回结果 【参考方案1】:

将你的 html 改成这样:你有 showUser() 而不是 showuser() 所以改变输入 onchage="showUser()".

onchange 事件写入两个inputs.so 他们将触发的两个字段。如果您只从前端发送日期并且数据库中的日期列是日期时间类型,则在您的 sql 中使用 date(date)。

"SELECT * FROM bookings WHERE date(date) between '$fromdate' and '$todate'";


  From date: <input type="text" id="fromdate" value="" onChange="showUser()">   To date: <input type="text" id="todate" value="" onChange="showUser()"> 

function showUser()


var fromdate = $( "#fromdate" ).val();
var todate= $( "#todate" ).val();

// rest of your code:





希望您在 php 中正确获取 post/get 参数。

【讨论】:

我正在使用 GET,它的语法是否正确:xmlhttp.open("GET","bet_date.php?fromdate="+fromdate+"&todate="+todate,true); 日期仅是日期类型 只使用 echo $sql;看看它给出了什么。 如果那个大表不可见,那么 echo $sql 怎么会可见,首先我想问你,我上面的文件是否正确? 是的,它们看起来是正确的。使用 print_r($sql);并在控制台中查看它提供了什么。【参考方案2】:

检查日期选择器使用 AJAX 传递的日期是否为适合您查询的有效格式。

尝试在您的 PHP 页面中显示 HTML datepicker 传递的这两个变量:

echo $_GET["fromdate"];
echo $_GET["todate"];

如果有任何问题,这会给你一个提示。

【讨论】:

【参考方案3】:
I have Created Whole Tutorial for Date Wise Report, so once try it

表结构

CREATE TABLE IF NOT EXISTS `bookings` (
  `id` int(12) NOT NULL AUTO_INCREMENT,
  `date` date NOT NULL,
  `start` varchar(255) NOT NULL,
  `name` varchar(255) NOT NULL,
  `email` varchar(255) NOT NULL,
  `phone` varchar(20) NOT NULL,
  `comments` longtext NOT NULL,
  `approved` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

INSERT INTO `bookings` (`id`, `date`, `start`, `name`, `email`, `phone`, `comments`, `approved`) VALUES
(1, '2014-12-17', 'yes', 'Mahendra', 'mahendra@XXXX', '89XXXXXXXX', 'nothing', 'yes'),
(2, '2014-12-18', 'no', 'Rahul', 'rahul@XXXXXX', '987XXXXXXX', 'very nice article', 'yes');

my_test.php

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function()
  $("#generate_report").click(function()
	  var from_date=jQuery("#fromdate").val();
	  var to_date=jQuery("#todate").val();
	  var data =
	  		
	  	from_date	 : from_date,
		to_date		 : to_date
	  
	jQuery.ajax(	
					type: "POST",
					url: "test.php",
					data: data,
					success: function(responce)
						$("#txtHint").after(responce);
				  	
			 );
  );
);
</script>
From date: <input type="text" id="fromdate" value="2014-12-17">   To date: <input type="text" id="todate" value="2014-12-18">  
<input type="button" name="generate_report" id="generate_report" value="Generate Report" />
<br>
<div id="txtHint"><b>User informations will be listed here.</b></div>

test.php(ajax 调用文件)

<?php
error_reporting(0);
include_once("wp-config.php");
extract($_POST);
$sql1=mysql_query("Select * from bookings where date between '".$from_date."' AND '".$to_date."'");
echo "<table border='1'>
	  <tr>
		<th>id</th>
		<th>date</th>
		<th>start</th>
		<th>name</th>
		<th>email</th>
		<th>phone</th>
		<th>comments</th>
		<th>approved</th>
	 </tr>";
		while($row = mysql_fetch_array($sql1))
		
		  echo "<tr>";
			  echo "<td>" . $row['id'] . "</td>";
			  echo "<td>" . $row['date'] . "</td>";
			  echo "<td>" . $row['start'] . "</td>";
			  echo "<td>" . $row['name'] . "</td>";
			  echo "<td>" . $row['email'] . "</td>";
			  echo "<td>" . $row['phone'] . "</td>";
			  echo "<td>" . $row['comments'] . "</td>";
			  echo "<td>" . $row['approved'] . "</td>";
		  echo "</tr>";
		
echo "</table>";
?>

这个演示完美运行,我刚刚创建,所以检查一下...

请任何人感兴趣,而不是请正确回答并为此解决方案投票.. 谢谢

【讨论】:

以上是关于如何使用mysql计算两个日期之间的时间差的主要内容,如果未能解决你的问题,请参考以下文章

在MYSQL里,如何计算两个日期间的时间差,并已年月形式显示。

如何写计算两个日期之间的天数函数

如何使用 PHP 计算两个日期之间的差异?

如何使用 datepicker、ajax、php、mysql 在两个日期之间生成报告?

mysql如何计算两个时间之间的年数月数天数

mysql如何查询两个日期之间最大的连续登录