如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?相关的知识,希望对你有一定的参考价值。

我是用来计算工人的工资,满月(其中有30天的和31天的)就按足月发放,做了几个月后余下的几天就既要算有几个月也要计算余下的天数,余下的天数就按天发钱。
例如:工人2012年3月5日开始上班,2012年6月15日离开,要算出他从开始上班到离开时有3个月零10天,这3个月里又包含了3、5月是按31天算一个月,4月按30天算一个月,(就是按自然月计算),然后余下10天数就按10*足月工资/30计算。我知道EXCL里面有个函数DATEDIF(日期1,日期2,"M")能实现计算月数,DATEDIF(日期1,日期2,"MD")算出除月数后余下的天数。

参考技术A 你是想一个月一结,还是工人从工作日开始到工作结束追问

给工人工资当然是一月一发。但是我需要计算所有工人的工资以便以后做结算用。

参考技术B 听不太懂,你说的啥。。顺口溜吗? 参考技术C 做了几个月后 是什么意思啊?追问

例如:工人2012年3月5日开始上班,2012年6月15日离开,要算出他从开始上班到离开时有3个月零10天,这3个月里又包含了3、5月是按31天算一个月,4月按30天算一个月,(就是按自然月计算),然后余下10天数就按10*足月工资/30计算。
我知道EXCL里面有个函数DATEDIF(日期1,日期2,"M")能实现计算月数,DATEDIF(日期1,日期2,"MD")算出除月数后余下的天数。

追答

mysql中也有这个函数啊,你可以用它生成一个视图 通过视图获取需要的月份个数 天数

追问

要用什么函数呀?应该如何做能详细点吗?我才接触php,对MySQL更不熟悉!

来自:求助得到的回答
参考技术C 这个很麻烦的

JS通过一个值与日期比较计算天数

现有一个数据框,输入的是数值如1,2,3....12,即是多少个月,设为Y
还有一个是日期如2010-01-01类型的值,设为R

现要通过R中的月份与Y相加得出一个新的日期,这个日期再与当前日期相比较
,当然要考虑如果输入的日期R为2009-11-01,数值Y为6的情况

请问如何用JS来判断?

<SCRIPT LANGUAGE="JavaScript">
<!--
function deal()
//var Y = 6;
//var R ="2009-11-01";
var R = document.getElementById('date').value +'';
var Y = document.getElementById('month').value;

alert(R);
var year=R.substr(0,4);
var month=R.substr(5,2);
var day=R.substr(8,2);

if((parseInt(month)+parseInt(Y)) > 12)

year++;
month = parseInt(month) + parseInt(Y) - 12;
else
month = parseInt(month) + parseInt(Y);


alert(year+"-"+month+"-"+day);

R = new Date(year,month,day,00,00,00);
dateNow = new Date();

var diff = R.getTime() - dateNow.getTime()
var days = Math.floor(diff/(1000*60*60*24));
var str = "与今天相差" + days + "天"

if(R > dateNow)
alert("大于今天!"+"\n"+str);
else
alert("小于今天!"+"\n"+str);


//-->
</SCRIPT>

月<input type="text" id="month" value="6">
日期 <input type="text" id="date" value="2009-11-01">
<input type="button" value="submit" onClick="deal()">

这样的吗
参考技术A 1.把开始时间和结束时间保存

var dateFrom = new Date(strFrom);
var dateTo = new Date(strTo);
2.计算时间差

var diff = dateTo.valueOf() - dateFrom.valueOf();
3.时间差转换为天数

var diff_day = parseInt(diff/(1000*60*60*24));
参考技术B 根据一楼帮你改的

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>

<body><script>
function deal()
var date = document.getElementById('date').value;
var month = document.getElementById('month').value;
var tmp = date.split('-');

var add = parseInt(month) + parseInt(tmp[1]);
if ( add > 12 )
tmp[0] = parseInt(tmp[0]) + 1;
tmp[1] = add%12;

var time = new Date(tmp[0],tmp[1],1);
var today = new Date();
var diff = time.getTime() - today.getTime()
var days = Math.floor(diff/(1000*60*60*24));
var str = "与今天相差" + days + "天" ;
alert(str);

</script>

月<input type="text" id="month" value="6">
日期 <input type="text" id="date" value="2009-11-1">
<input type="button" value="submit" onClick="deal()">
</body>
</html>
参考技术C 简单写了下,不知道是不是你的意思

<script>
function deal()
var date = document.getElementById('date').value;
var month = document.getElementById('month').value;
var tmp = date.split('-');

var add = parseInt(month) + parseInt(tmp[1]);
if ( add > 12 )
tmp[0] = parseInt(tmp[0]) + 1;
tmp[1] = add%12;

alert(tmp.join('-'));

</script>

月<input type="text" id="month" value="6">
日期 <input type="text" id="date" value="2009-11-1">
<input type="button" value="submit" onClick="deal()">

以上是关于如何用PHP+MySQL计算两个日期之间的月份数和其余下的天数?的主要内容,如果未能解决你的问题,请参考以下文章

如何用EXCEL计算两个日期之间相差的年数和月数?

如何用jquery判断两个日期之间的时间差小于一年,日期格式为20121212?

如何用excel计算两个日期之间相差的年数和月数

js 两个日期间隔月数

如何用excel计算月份和天数?

js如何计算两个日期的月份差?