如何使用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里,如何计算两个日期间的时间差,并已年月形式显示。