前言

如何计算年龄?我的第一直觉做法:(当前时间戳 - 出生时的时间戳)/ (365*86400)  所得结果向下取整。后来发现这种做法获得的结果不准确,不是多了一岁就是少了一岁,不能简单粗暴的这么处理,只能把相差的年数月数天数精确的算出来。我一开始以为这个很简单,这个问题不值得记录下来,后来发现不是这么一回事,实现起来没有那么顺利,对我而言。

闰年

要计算2个日期之间的相差的时间,肯定需要知道闰年是咋回事。地球绕太阳公转一圈的时间即为公历一年的时间,地球公转花的时间大概是365天5小时48分,这样每隔4年差不多公历时间多出了一天,这一年天文学家称之为闰年,闰年的2月份是29天。前人总结出来闰年的判断方法:年份能被400整除或者年份不能被100整除且能被4整除。(备注:我对公农历不是很了解,这些信息也是从网上找到的,我对这些不是很感兴趣,没有花更多的时间深入的了解)

实现

先算出相差的年数,再算相差的月数,最后计算相差的天数,思路很简单,真正的实现不是一帆风顺。

代码

/**
* @desc 计算年龄
* 计算年份->计算月份->计算天数
*
* @date 2015-09-22
* @author WadeYu
*/ var getDiffYmdBetweenDate = function(sDate1,sDate2){
var fixDate = function(sDate){
var aD = sDate.split('-');
for(var i = 0; i < aD.length; i++){
aD[i] = fixZero(parseInt(aD[i]));
}
return aD.join('-');
};
var fixZero = function(n){
return n < 10 ? '0'+n : n;
};
var fixInt = function(a){
for(var i = 0; i < a.length; i++){
a[i] = parseInt(a[i]);
}
return a;
};
var getMonthDays = function(y,m){
var aMonthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];
if((y%400 == 0) || (y%4==0 && y%100!=0)){
aMonthDays[2] = 29;
}
return aMonthDays[m];
};
var checkDate = function(sDate){
};
var y = 0;
var m = 0;
var d = 0;
var sTmp;
var aTmp;
sDate1 = fixDate(sDate1);
sDate2 = fixDate(sDate2);
if(sDate1 > sDate2){
sTmp = sDate2;
sDate2 = sDate1;
sDate1 = sTmp;
}
var aDate1 = sDate1.split('-');
aDate1 = fixInt(aDate1);
var aDate2 = sDate2.split('-');
aDate2 = fixInt(aDate2);
//计算相差的年份
/*aTmp = [aDate1[0]+1,fixZero(aDate1[1]),fixZero(aDate1[2])];
while(aTmp.join('-') <= sDate2){
y++;
aTmp[0]++;
}*/
y = aDate2[0] - aDate1[0];
if( sDate2.replace(aDate2[0],'') < sDate1.replace(aDate1[0],'')){
y = y - 1;
}
//计算月份
aTmp = [aDate1[0]+y,aDate1[1],fixZero(aDate1[2])];
while(true){
if(aTmp[1] == 12){
aTmp[0]++;
aTmp[1] = 1;
}else{
aTmp[1]++;
}
if(([aTmp[0],fixZero(aTmp[1]),aTmp[2]]).join('-') <= sDate2){
m++;
} else {
break;
}
}
//计算天数
aTmp = [aDate1[0]+y,aDate1[1]+m,aDate1[2]];
if(aTmp[1] > 12){
aTmp[0]++;
aTmp[1] -= 12;
}
while(true){
if(aTmp[2] == getMonthDays(aTmp[0],aTmp[1])){
aTmp[1]++;
aTmp[2] = 1;
} else {
aTmp[2]++;
}
sTmp = ([aTmp[0],fixZero(aTmp[1]),fixZero(aTmp[2])]).join('-');
if(sTmp <= sDate2){
d++;
} else {
break;
}
}
return {y:y,m:m,d:d};
}; var aTest = [
['1984-9-17','2015-8-15'],
['1984-9-17','1985-9-18'],
['1984-9-17','1984-10-17'],
['1984-9-17','1984-10-10'],
];
for(var i = 0; i < aTest.length; i++){
console.log(aTest[i][0]+':'+aTest[i][1]);
console.log(getDiffYmdBetweenDate(aTest[i][0],aTest[i][1]));
}

  

后记

1.这个问题的实现花了一些时间思考,一开始不是很想记录下,后来想想毕竟是花了时间思考,现在健忘比较严重,还是记录下吧。

2.跟同事讨论,年龄计算是否需要包含当天生日那天,讨论的结果是不包含,没过生日这天年龄不增加,也算刷新了一个基本常识吧。

3.能算出相差的年数月数天数,如果只需要计算总天数或者总月数就很简单了。

4.农历年份会变化,不能根据农历日期来算年龄

5.PHP农历公历转换类,感谢此类的作者

<?php
/**
* 阴历,阳历,日历转换
*/
class o_calendar {
public static $MIN_YEAR = 1600;
public static $MAX_YEAR = 2200;
//public static $lunarInfo = array(array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),array(5,1,26,43344),array(0,2,13,59728),array(0,2,2,27296),array(3,1,22,44368),array(0,2,10,43856),array(8,1,31,19304),array(0,2,19,19168),array(0,2,8,42352),array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),array(0,2,13,22176),array(0,2,2,39632),array(2,1,22,19176),array(0,2,10,19168),array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),array(7,2,1,18872),array(0,2,20,18800),array(0,2,8,42160),array(5,1,28,45656),array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),array(0,2,17,54432),array(0,2,6,59984),array(5,1,26,27976),array(0,2,14,23248),array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),array(0,2,5,22176),array(4,1,25,43736),array(0,2,13,9680),array(0,2,2,37584),array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),array(3,1,24,21176),array(0,2,12,21168),array(8,1,31,43344),array(0,2,18,59728),array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),array(0,2,9,55632),array(7,1,30,23208),array(0,2,17,22176),array(0,2,6,38608),array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),array(6,1,28,38608),array(0,2,16,38320),array(0,2,5,18864),array(4,1,25,42168),array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),array(0,2,15,18800),array(0,2,4,25776),array(3,1,23,27216),array(0,2,10,59984),array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),array(0,2,1,55888),array(2,1,22,23208),array(0,2,9,22176),array(7,1,29,43736),array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),array(0,2,19,19360),array(0,2,8,42416),array(6,1,28,21176),array(0,2,16,21168),array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),array(0,2,6,53856),array(5,1,26,59696),array(0,2,13,54576),array(0,2,3,23200),array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),array(5,1,24,55968),array(0,2,12,46496),array(0,2,1,22224),array(2,1,22,19160),array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),array(0,2,11,37744),array(8,2,1,18808),array(0,2,19,18800),array(0,2,8,25776),array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),array(7,1,29,54440),array(0,2,17,54432),array(0,2,5,55888),array(5,1,26,23208),array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),array(0,2,15,44368),array(0,2,5,21920),array(4,1,24,42448),array(0,2,12,42416),array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),array(0,2,3,42352),array(4,1,24,21104),array(0,2,10,53856),array(8,1,30,59696),array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),array(2,1,21,55592),array(0,2,9,54560));
public static $lunarInfo = array(array(0,2,15,9680),array(0,2,3,37584),array(3,1,23,51544),array(0,2,11,43344),array(7,1,31,46248),array(0,2,18,27296),array(0,2,7,44368),array(6,1,28,21928),array(0,2,16,19360),array(0,2,4,42416),array(4,1,25,21176),array(0,2,13,21168),array(0,2,2,26928),array(2,1,21,29864),array(0,2,9,27296),array(6,1,29,44368),array(0,2,17,39760),array(0,2,6,19296),array(4,1,26,42352),array(0,2,14,42224),array(0,2,4,21088),array(3,1,22,59696),array(0,2,10,54576),array(8,1,31,23208),array(0,2,19,22176),array(0,2,7,38608),array(5,1,28,19176),array(0,2,16,19152),array(0,2,5,42192),array(4,1,24,53864),array(0,2,12,45648),array(0,2,1,54560),array(2,1,21,55968),array(0,2,8,46496),array(6,1,29,38352),array(0,2,17,38320),array(0,2,7,18864),array(5,1,26,42168),array(0,2,14,42160),array(0,2,3,43600),array(3,1,23,46376),array(0,2,10,27968),array(0,1,30,44448),array(0,2,18,43872),array(0,2,8,37744),array(5,1,28,18808),array(0,2,16,18800),array(0,2,5,25776),array(4,1,25,27216),array(0,2,11,55888),array(0,2,1,27424),array(1,1,21,43872),array(0,2,9,43744),array(6,1,29,37608),array(0,2,17,37600),array(0,2,6,51552),array(5,1,26,54440),array(0,2,13,54432),array(0,2,2,55888),array(3,1,23,23208),array(0,2,11,22176),array(8,1,30,42704),array(0,2,18,42448),array(0,2,8,37584),array(6,1,28,43352),array(0,2,15,43344),array(0,2,4,46240),array(4,1,24,46416),array(0,2,12,44368),array(0,2,1,21920),array(2,1,21,42448),array(0,2,9,42416),array(7,1,30,21176),array(0,2,17,21104),array(0,2,6,26928),array(5,1,26,29864),array(0,2,14,27296),array(0,2,2,44368),array(3,1,23,19880),array(0,2,11,19296),array(8,1,31,42352),array(0,2,18,42208),array(0,2,7,53856),array(6,1,27,59696),array(0,2,15,54560),array(0,2,3,55968),array(4,1,24,23376),array(0,2,12,22224),array(0,2,2,19168),array(3,1,21,42216),array(0,2,9,42192),array(7,1,29,53848),array(0,2,17,43600),array(0,2,5,46368),array(5,1,25,54944),array(0,2,13,46496),array(0,2,3,21968),array(3,1,23,19160),array(0,2,11,18864),array(7,1,31,42168),array(0,2,19,42160),array(0,2,8,43600),array(6,1,28,46376),array(0,2,16,27936),array(0,2,5,44384),array(4,1,25,21936),array(0,2,13,37744),array(0,2,3,18800),array(3,1,23,42168),array(0,2,10,25776),array(7,1,30,27216),array(0,2,17,55888),array(0,2,7,23200),array(5,1,26,43856),array(0,2,14,43744),array(0,2,4,21216),array(3,1,24,51568),array(0,2,11,51552),array(8,1,31,54440),array(0,2,19,54432),array(0,2,8,54608),array(6,1,28,23208),array(0,2,16,22176),array(0,2,5,42704),array(4,1,26,21224),array(0,2,13,21200),array(0,2,2,43344),array(2,1,22,54440),array(0,2,10,45728),array(7,1,29,46416),array(0,2,17,44368),array(0,2,7,19872),array(5,1,27,42448),array(0,2,14,42416),array(0,2,4,21168),array(4,1,24,43192),array(0,2,12,26928),array(9,1,31,27288),array(0,2,19,27296),array(0,2,8,43856),array(6,1,29,19880),array(0,2,16,19296),array(0,2,5,42352),array(4,1,26,20848),array(0,2,13,53600),array(0,2,1,59696),array(3,1,22,27280),array(0,2,9,55968),array(7,1,30,23376),array(0,2,17,22224),array(0,2,7,19168),array(5,1,27,42216),array(0,2,15,41680),array(0,2,3,53584),array(4,1,23,54440),array(0,2,11,46368),array(9,1,31,54928),array(0,2,18,44448),array(0,2,8,21968),array(6,1,29,10968),array(0,2,17,17840),array(0,2,5,41648),array(5,1,25,45400),array(0,2,13,43344),array(0,2,2,46368),array(2,1,21,46480),array(0,2,9,44384),array(7,1,30,21936),array(0,2,18,21360),array(0,2,7,17776),array(5,1,27,25272),array(0,2,15,21168),array(0,2,4,26960),array(3,1,23,27816),array(0,2,11,23200),array(10,1,31,43856),array(0,2,19,42704),array(0,2,8,19168),array(6,1,28,42352),array(0,2,16,42336),array(0,2,5,53920),array(5,1,24,59728),array(0,2,12,54608),array(0,2,2,23200),array(3,1,22,43856),array(0,2,9,42704),array(7,1,30,19176),array(0,2,18,19120),array(0,2,7,43216),array(5,1,26,53864),array(0,2,14,45728),array(0,2,3,46416),array(4,1,24,22184),array(0,2,11,19872),array(0,1,31,38320),array(2,1,21,19128),array(0,2,9,18864),array(6,1,28,43192),array(0,2,16,25776),array(0,2,5,27280),array(4,1,25,46416),array(0,2,13,27472),array(0,2,3,11168),array(2,1,23,38320),array(0,2,11,37744),array(7,1,31,20848),array(0,2,18,53600),array(0,2,7,58544),array(5,1,28,27280),array(0,2,14,55952),array(0,2,4,23376),array(3,1,25,11112),array(0,2,13,10976),array(0,2,1,37600),array(2,1,21,53608),array(0,2,9,51536),array(6,1,29,54440),array(0,2,16,46240),array(0,2,5,46736),array(4,1,26,22224),array(0,2,14,21936),array(0,2,3,9680),array(3,1,23,41688),array(0,2,11,37552),array(7,1,31,43352),array(0,2,18,43344),array(0,2,7,46240),array(5,1,27,46416),array(0,2,15,44368),array(0,2,4,21936),array(4,1,25,9656),array(0,2,13,9584),array(9,2,2,21176),array(0,2,20,21168),array(0,2,9,26960),array(6,1,29,27816),array(0,2,17,23200),array(0,2,5,43856),array(4,1,26,21352),array(0,2,14,19168),array(0,2,3,42352),array(3,1,23,21168),array(0,2,10,53856),array(7,1,30,59728),array(0,2,18,54608),array(0,2,7,23200),array(5,1,27,43728),array(0,2,15,38352),array(0,2,5,19168),array(4,1,24,42200),array(0,2,12,42192),array(8,2,1,53848),array(0,2,20,45712),array(0,2,8,46416),array(7,1,29,22184),array(0,2,17,11680),array(0,2,6,38320),array(5,1,26,19128),array(0,2,14,18864),array(0,2,3,42160),array(3,1,23,45656),array(0,2,10,27216),array(8,1,30,44360),array(0,2,18,27472),array(0,2,8,11104),array(5,1,27,38320),array(0,2,15,37744),array(0,2,5,18800),array(4,1,25,25776),array(0,2,11,54432),array(10,1,31,59984),array(0,2,19,55952),array(0,2,9,23248),array(6,1,29,11112),array(0,2,17,10976),array(0,2,6,37600),array(5,1,26,51560),array(0,2,13,51536),array(0,2,2,54432),array(3,1,22,55888),array(0,2,10,46672),array(7,1,30,22224),array(0,2,18,21936),array(0,2,8,9680),array(5,1,28,37592),array(0,2,15,37552),array(0,2,4,43344),array(4,1,24,46248),array(0,2,12,46240),array(0,1,31,46416),array(2,1,21,22184),array(0,2,9,21936),array(6,1,30,9656),array(0,2,17,9584),array(0,2,6,21168),array(5,1,26,43344),array(0,2,13,59728),array(0,2,2,27296),array(3,1,22,44368),array(0,2,10,43856),array(8,1,31,19304),array(0,2,19,19168),array(0,2,8,42352),array(5,1,29,21096),array(0,2,16,53856),array(0,2,4,55632),array(4,1,25,27304),array(0,2,13,22176),array(0,2,2,39632),array(2,1,22,19176),array(0,2,10,19168),array(6,1,30,42200),array(0,2,18,42192),array(0,2,6,53840),array(5,1,26,54568),array(0,2,14,46400),array(0,2,3,54944),array(2,1,23,38608),array(0,2,11,38320),array(7,2,1,18872),array(0,2,20,18800),array(0,2,8,42160),array(5,1,28,45656),array(0,2,16,27216),array(0,2,5,27968),array(4,1,24,44456),array(0,2,13,11104),array(0,2,2,38256),array(2,1,23,18808),array(0,2,10,18800),array(6,1,30,25776),array(0,2,17,54432),array(0,2,6,59984),array(5,1,26,27976),array(0,2,14,23248),array(0,2,4,11104),array(3,1,24,37744),array(0,2,11,37600),array(7,1,31,51560),array(0,2,19,51536),array(0,2,8,54432),array(6,1,27,55888),array(0,2,15,46416),array(0,2,5,22176),array(4,1,25,43736),array(0,2,13,9680),array(0,2,2,37584),array(2,1,22,51544),array(0,2,10,43344),array(7,1,29,46248),array(0,2,17,27808),array(0,2,6,46416),array(5,1,27,21928),array(0,2,14,19872),array(0,2,3,42416),array(3,1,24,21176),array(0,2,12,21168),array(8,1,31,43344),array(0,2,18,59728),array(0,2,8,27296),array(6,1,28,44368),array(0,2,15,43856),array(0,2,5,19296),array(4,1,25,42352),array(0,2,13,42352),array(0,2,2,21088),array(3,1,21,59696),array(0,2,9,55632),array(7,1,30,23208),array(0,2,17,22176),array(0,2,6,38608),array(5,1,27,19176),array(0,2,15,19152),array(0,2,3,42192),array(4,1,23,53864),array(0,2,11,53840),array(8,1,31,54568),array(0,2,18,46400),array(0,2,7,46752),array(6,1,28,38608),array(0,2,16,38320),array(0,2,5,18864),array(4,1,25,42168),array(0,2,13,42160),array(10,2,2,45656),array(0,2,20,27216),array(0,2,9,27968),array(6,1,29,44448),array(0,2,17,43872),array(0,2,6,38256),array(5,1,27,18808),array(0,2,15,18800),array(0,2,4,25776),array(3,1,23,27216),array(0,2,10,59984),array(8,1,31,27432),array(0,2,19,23232),array(0,2,7,43872),array(5,1,28,37736),array(0,2,16,37600),array(0,2,5,51552),array(4,1,24,54440),array(0,2,12,54432),array(0,2,1,55888),array(2,1,22,23208),array(0,2,9,22176),array(7,1,29,43736),array(0,2,18,9680),array(0,2,7,37584),array(5,1,26,51544),array(0,2,14,43344),array(0,2,3,46240),array(4,1,23,46416),array(0,2,10,44368),array(9,1,31,21928),array(0,2,19,19360),array(0,2,8,42416),array(6,1,28,21176),array(0,2,16,21168),array(0,2,5,43312),array(4,1,25,29864),array(0,2,12,27296),array(0,2,1,44368),array(2,1,22,19880),array(0,2,10,19296),array(6,1,29,42352),array(0,2,17,42208),array(0,2,6,53856),array(5,1,26,59696),array(0,2,13,54576),array(0,2,3,23200),array(3,1,23,27472),array(0,2,11,38608),array(11,1,31,19176),array(0,2,19,19152),array(0,2,8,42192),array(6,1,28,53848),array(0,2,15,53840),array(0,2,4,54560),array(5,1,24,55968),array(0,2,12,46496),array(0,2,1,22224),array(2,1,22,19160),array(0,2,10,18864),array(7,1,30,42168),array(0,2,17,42160),array(0,2,6,43600),array(5,1,26,46376),array(0,2,14,27936),array(0,2,2,44448),array(3,1,23,21936),array(0,2,11,37744),array(8,2,1,18808),array(0,2,19,18800),array(0,2,8,25776),array(6,1,28,27216),array(0,2,15,59984),array(0,2,4,27424),array(4,1,24,43872),array(0,2,12,43744),array(0,2,2,37600),array(3,1,21,51568),array(0,2,9,51552),array(7,1,29,54440),array(0,2,17,54432),array(0,2,5,55888),array(5,1,26,23208),array(0,2,14,22176),array(0,2,3,42704),array(4,1,23,21224),array(0,2,11,21200),array(8,1,31,43352),array(0,2,19,43344),array(0,2,7,46240),array(6,1,27,46416),array(0,2,15,44368),array(0,2,5,21920),array(4,1,24,42448),array(0,2,12,42416),array(0,2,2,21168),array(3,1,22,43320),array(0,2,9,26928),array(7,1,29,29336),array(0,2,17,27296),array(0,2,6,44368),array(5,1,26,19880),array(0,2,14,19296),array(0,2,3,42352),array(4,1,24,21104),array(0,2,10,53856),array(8,1,30,59696),array(0,2,18,54560),array(0,2,7,55968),array(6,1,27,27472),array(0,2,15,22224),array(0,2,5,19168),array(4,1,25,42216),array(0,2,12,42192),array(0,2,1,53584),array(2,1,21,55592),array(0,2,9,54560),array(7,1,29,55952),array(0,2,17,46496),array(0,2,7,21968),array(5,1,28,19160),array(0,2,15,18864),array(0,2,4,42160),array(4,1,24,53848),array(0,2,12,43600),array(9,1,31,46376),array(0,2,19,27936),array(0,2,8,44384),array(6,1,29,21936),array(0,2,16,37744),array(0,2,6,18800),array(4,1,26,25784),array(0,2,14,21680),array(0,2,2,27216),array(3,1,22,27944),array(0,2,10,27296),array(7,1,30,43856),array(0,2,17,43728),array(0,2,7,21216),array(5,1,27,51568),array(0,2,15,43360),array(0,2,3,54432),array(4,1,23,59984),array(0,2,11,55632),array(0,2,1,23200),array(0,2,19,22176),array(0,2,8,42704),array(6,1,29,21224),array(0,2,17,21200),array(0,2,5,43216),array(5,1,25,54440),array(0,2,13,45728),array(0,2,2,46416),array(2,1,22,22184),array(0,2,10,21920),array(7,1,30,42448),array(0,2,18,42416),array(0,2,7,21168),array(5,1,27,43192),array(0,2,15,26800),array(0,2,4,29328),array(4,1,23,46416),array(0,2,11,27472),array(0,2,1,11680),array(0,2,20,19296),array(0,2,8,42352),array(6,1,29,20848),array(0,2,16,53600),array(0,2,5,59568),array(5,1,25,27280),array(0,2,12,55952),array(0,2,2,23376),array(3,1,23,11112),array(0,2,10,10976),array(7,1,30,41704),array(0,2,18,41680),array(0,2,7,53584),array(6,1,26,54440),array(0,2,14,46368),array(0,2,3,54928),array(4,1,24,23248),array(0,2,11,21936),array(10,2,1,10968),array(0,2,20,17840),array(0,2,9,41648),array(6,1,28,43352),array(0,2,16,43344),array(0,2,5,46240),array(5,1,25,46416),array(0,2,12,44368),array(0,2,2,21936),array(3,1,23,9656),array(0,2,11,17776),array(7,1,30,25272),array(0,2,18,21168),array(0,2,7,26960),array(6,1,27,27816),array(0,2,14,23200),array(0,2,3,43856),array(4,1,24,21352),array(0,2,12,19168),array(0,1,31,42352),array(2,1,21,21168),array(0,2,8,53920),array(6,1,28,59728),array(0,2,15,54608),array(0,2,5,23200),array(5,1,25,43856),array(0,2,13,42704),array(0,2,2,19168),array(3,1,22,42328),array(0,2,10,42192),array(7,1,30,53848),array(0,2,17,45712),array(0,2,6,46416),array(6,1,27,22184),array(0,2,15,11680)); /**
* 将阳历转换为阴历
* @param year 公历-年
* @param month 公历-月
* @param date 公历-日
*/
public static function convertSolarToLunar($year,$month,$date){
$yearData = self::$lunarInfo[$year-self::$MIN_YEAR];
if($year==self::$MIN_YEAR&&$month<=2&&$date<=9){
return array('1891-01-01',false);
}
$ret = self::getLunarByBetween($year,self::getDaysBetweenSolar($year,$month,$date,$yearData[1],$yearData[2]));
$ret[0] = fn::formatDate($ret[0]);
return $ret;
} /**
* 将阴历转换为阳历
* @param year 阴历-年
* @param month 阴历-月,闰月处理:例如如果当年闰五月,那么第二个五月就传六月,相当于阴历有13个月,只是有的时候第13个月的天数为0
* @param date 阴历-日
*/
public static function convertLunarToSolar($year,$month,$date){
$yearData = self::$lunarInfo[$year-self::$MIN_YEAR];
$between = self::getDaysBetweenLunar($year,$month,$date);
$res = mktime(0,0,0,$yearData[1],$yearData[2],$year); return date('Y-m-d',$res+$between*24*60*60);
} /**
* 判断是否是闰年
* @param year
*/
public static function isLeapYear($year){
return (($year%4==0 && $year%100 !=0) || ($year%400==0));
} /**
* 获取干支纪年
* @param year
*/
public static function getLunarYearName($year){
$sky = array('庚','辛','壬','癸','甲','乙','丙','丁','戊','己');
$earth = array('申','酉','戌','亥','子','丑','寅','卯','辰','巳','午','未'); $year = $year.'';
return $sky[$year{3}].$earth[$year%12];
} /**
* 根据阴历年获取生肖
* @param year 阴历年
*/
public static function getYearZodiac($year){
$zodiac = array('猴','鸡','狗','猪','鼠','牛','虎','兔','龙','蛇','马','羊');
return $zodiac[$year%12];
} /**
* 获取阳历月份的天数
* @param year 阳历-年
* @param month 阳历-月
*/
public static function getSolarMonthDays($year,$month){
$monthHash = array('1'=>31,'2'=>self::isLeapYear($year)?29:28,'3'=>31,'4'=>30,'5'=>31,'6'=>30,'7'=>31,'8'=>31,'9'=>30,'10'=>31,'11'=>30,'12'=>31);
return $monthHash["$month"];
} /**
* 获取阴历月份的天数
* @param year 阴历-年
* @param month 阴历-月,从一月开始
*/
public static function getLunarMonthDays($year,$month){
$monthData = self::getLunarMonths($year);
return $monthData[$month-1];
} /**
* 获取阴历每月的天数的数组
* @param year
*/
public static function getLunarMonths($year){ $yearData = self::$lunarInfo[$year - self::$MIN_YEAR];
$leapMonth = $yearData[0]; $bit = decbin($yearData[3]);
for ($i = 0; $i < strlen($bit);$i ++) {
$bitArray[$i] = substr($bit, $i, 1);
} for($k=0,$klen=16-count($bitArray);$k<$klen;$k++){
array_unshift($bitArray, '0');
} $bitArray = array_slice($bitArray,0,($leapMonth==0?12:13));
for($i=0; $i<count($bitArray); $i++){
$bitArray[$i] = $bitArray[$i] + 29;
} return $bitArray;
} /**
* 获取农历每年的天数
* @param year 农历年份
*/
public static function getLunarYearDays($year){
$yearData = self::$lunarInfo[$year-self::$MIN_YEAR];
$monthArray = self::getLunarYearMonths($year);
$len = count($monthArray);
return ($monthArray[$len-1]==0?$monthArray[$len-2]:$monthArray[$len-1]);
} public static function getLunarYearMonths($year){
//debugger;
$monthData = self::getLunarMonths($year);
$res=array();
$temp=0;
$yearData = self::$lunarInfo[$year-self::$MIN_YEAR];
$len = ($yearData[0]==0?12:13);
for($i=0;$i<$len;$i++){
$temp=0;
for($j=0;$j<=$i;$j++){
$temp+=$monthData[$j];
}
array_push($res, $temp);
}
return $res;
} /**
* 获取闰月
* @param year 阴历年份
*/
public static function getLeapMonth($year){
$yearData = self::$lunarInfo[$year-self::$MIN_YEAR];
return $yearData[0];
} /**
* 计算阴历日期与正月初一相隔的天数
* @param year
* @param month
* @param date
*/
public static function getDaysBetweenLunar($year,$month,$date){
$yearMonth = self::getLunarMonths($year); $res=0;
for($i=1;$i<$month;$i++){
$res +=$yearMonth[$i-1];
}
$res+=$date-1; return $res;
} /**
* 计算2个阳历日期之间的天数
* @param year 阳历年
* @param cmonth
* @param cdate
* @param dmonth 阴历正月对应的阳历月份
* @param ddate 阴历初一对应的阳历天数
*/
public static function getDaysBetweenSolar($year,$cmonth,$cdate,$dmonth,$ddate){ $a = mktime(0,0,0,$cmonth,$cdate,$year);
$b = mktime(0,0,0,$dmonth,$ddate,$year); return ceil(($a-$b)/24/3600);
} /**
* 根据距离正月初一的天数计算阴历日期
* @param year 阳历年
* @param between 天数
*/
public static function getLunarByBetween($year,$between){
//debugger;
$lunarArray = array();
$yearMonth=array();
$t=0;
$e=0;
$leapMonth=0;
$m='';
$isLeap = false;
if($between==0){
array_push($lunarArray, $year,'正月','初一');
$t = 1;
$e = 1;
$month = $t;
}else{
$year = $between>0? $year : ($year-1);
$yearMonth = self::getLunarYearMonths($year);
$leapMonth = self::getLeapMonth($year);
$between = $between>0?$between : (self::getLunarYearDays($year)+$between); for($i=0;$i<13;$i++){
if($between==$yearMonth[$i]){
$t=$i+2;
$e=1;
break;
}else if($between<$yearMonth[$i]){
$t=$i+1;
$e=$between-(empty($yearMonth[$i-1])?0:$yearMonth[$i-1])+1;
break;
}
} if ($leapMonth!=0&&$t==$leapMonth+1) {
$month = $t- 1;
$isLeap = true;
}else{
$month = $leapMonth!=0&&$leapMonth+1<$t?($t-1):$t;
$isLeap;
}
//$m = ($leapMonth!=0&&$t==$leapMonth+1)?('闰'.self::getCapitalNum($t- 1,true)):self::getCapitalNum(($leapMonth!=0&&$leapMonth+1<$t?($t-1):$t),true); //array_push($lunarArray,$year,$m,self::getCapitalNum($e,false));
} return array($year . '-' . $month . '-' . $e, $isLeap);
//array_push($lunarArray,self::getLunarYearName($year));//天干地支
//array_push($lunarArray,$t,$e);
//array_push($lunarArray,self::getYearZodiac($year));//12生肖
//array_push($lunarArray,$leapMonth);//闰几月
//return $lunarArray;
} /**
* 获取数字的阴历叫法
* @param num 数字
* @param isMonth 是否是月份的数字
*/
public static function getCapitalNum($num,$isMonth){
$isMonth = $isMonth || false;
$dateHash=array('0'=>'','1'=>'一','2'=>'二','3'=>'三','4'=>'四','5'=>'五','6'=>'六','7'=>'七','8'=>'八','9'=>'九','10'=>'十');
$monthHash=array('0'=>'','1'=>'正月','2'=>'二月','3'=>'三月','4'=>'四月','5'=>'五月','6'=>'六月','7'=>'七月','8'=>'八月','9'=>'九月','10'=>'十月','11'=>'冬月','12'=>'腊月');
$res=''; if($isMonth){
$res = $monthHash[$num];
}else{
if($num<=10){
$res = '初'.$dateHash[$num];
}else if($num>10&&$num<20){
$res = '十'.$dateHash[$num-10];
}else if($num==20){
$res = "二十";
}else if($num>20&&$num<30){
$res = "廿".$dateHash[$num-20];
}else if($num==30){
$res = "三十";
}
}
return $res;
}
/**
*
* @param unknown $y
* @param unknown $m
* @param unknown $d
* @param unknown $time
*/
public static function getSolarAndLunarTime($y, $m, $d , $time){
$aTime = explode(':', $time);
$sSolar = $y . cfg::lang('year') . $m . cfg::lang('month') . $d . cfg::lang('day') . ' ' . $aTime[0] . cfg::lang('hour') . $aTime[1] . cfg::lang('minute'); $aLunarRes = calendarswach::convertSolarToLunar($y, $m, $d);
$lunarDate = $aLunarRes[0];//阴历日期
$isLeap = $aLunarRes[1];//是否闰月
$aLunar = explode('-', $lunarDate);
$blockNumber = cfg::lang('blockNumber');
$lunarY = $blockNumber[intval($aLunar[0]{0})] . $blockNumber[intval($aLunar[0]{1})] . $blockNumber[intval($aLunar[0]{2})] . $blockNumber[intval($aLunar[0]{3})];
$calendarLang = cfg::lang('calendar');
$lunarM = $calendarLang['month'][intval($aLunar[1])];
if ($isLeap) {
$lunarM = cfg::lang('leap') . $lunarM;
}
$lunarD = $calendarLang['date'][intval($aLunar[2])]; $aTime = explode(':', $time);
$tempHour = ($aTime[0] % 2) == 0 ? $aTime[0] + 2 : $aTime[0] + 3; //奇数+3 偶数 +2
$tempHour = $tempHour % 24;
$hourDiZhi = $tempHour / 2; //每两小时一个时辰
if ($hourDiZhi == 0) {
$hourDiZhi = 12;
}
$lang = cfg::lang('diZhi'); $lunarH = $lang[$hourDiZhi] . cfg::lang('lunarhour'); return array('solar' => $sSolar,
'lunar' => $lunarY . cfg::lang('year') . $lunarM . $lunarD . cfg::lang('day') . ' ' . $lunarH);
}
///新加的
/**
*
* @param unknown $sdate
* @param unknown $edate
*/
public static function getGapDays($sdate, $edate){
if($sdate > $edate){
return 0;
}
$aSdate = explode('-', $sdate);
$aEdate = explode('-', $edate);
$sYear = $aSdate[0];
$sMonth = (int)$aSdate[1];
$sDate = (int)$aSdate[2]; $eYear = $aEdate[0];
$eMonth = (int)$aEdate[1];
$eDate = (int)$aEdate[2]; $allDays = $yearDays = 0;
//同一年
if($sYear == $eYear){
if($sMonth == $eMonth){
//同一个月
return $eDate - $sDate;
}
//不同月
$isLeap = self::isLeapYear($sYear);
$loopMonth = $sMonth;
while ($loopMonth <= $eMonth){
if($loopMonth == $sMonth){
$monDays = self::getMonthDays($loopMonth, $isLeap);
$allDays += ($monDays - $sDate);//加上这个月剩余的天数
}elseif ($loopMonth == $eMonth){
$allDays += $eDate;//加上末月日期数
}else {
$monDays = self::getMonthDays($loopMonth, $isLeap);
$allDays += $monDays;//加上这个月的天数
}
$loopMonth++;
}
return $allDays;
}
//跨年
$aLeapAndGeneral = self::getLongYearsLeapAndGeneral($sYear, $eYear); $yearDays = $aLeapAndGeneral['leapYears'] * 366 + $aLeapAndGeneral['generalYears'] * 365;
//var_dump($aLeapAndGeneral,$yearDays, $sYear, $eYear, $allDays);
//计算首尾 $loopMonth = $sMonth;
$loopYear = $sYear;
$isLeap = self::isLeapYear($loopYear);
while (1){
if(($loopMonth == $sMonth) && ($loopYear == $sYear) ){
$monDays = self::getMonthDays($loopMonth, $isLeap);
$allDays += ($monDays - $sDate);//加上这个月剩余的天数
}elseif (($loopMonth == $eMonth) && ($loopYear == $eYear) ){
$allDays += $eDate;//加上末月日期数
break;
}else {
$monDays = self::getMonthDays($loopMonth, $isLeap);
$allDays += $monDays;//加上这个月的天数
}
$loopMonth++;
if($loopMonth == 13){
//转到尾年
$loopMonth = 1;//从1月份开始计算
$loopYear = $eYear;
$isLeap = self::isLeapYear($loopYear);
}
}
//var_dump($yearDays, $allDays);
$allDays += $yearDays; return $allDays;
} //计算差距2年(含2年)以上的闰年和平年年
//不含边界
public static function getLongYearsLeapAndGeneral($sYear, $eYear){
$sYear = (int)$sYear;
$eYear = (int)$eYear;
$gapYears = $eYear - $sYear;
if($gapYears < 2){
return array('leapYears' => 0, 'generalYears' => 0);
} $leapYears = $generalYears = 0;
$firstLeapYear = ++$sYear;
$endLeapYear = --$eYear; //5年以内
if($gapYears < 10){
while ($firstLeapYear <= $endLeapYear){
if(self::isLeapYear($firstLeapYear)){
$leapYears++;
}else {
$generalYears++;
}
$firstLeapYear++;
}
return array('leapYears' => $leapYears, 'generalYears' => $generalYears);
}
//超过5年
//首先找到开始年的下一个闰年
$sEgeneralYears = 0;
for ($i = 0; $i < 5; $i++){
if(self::isLeapYear($firstLeapYear)){
break;
}
$sEgeneralYears++;
$firstLeapYear++;
}
//找到最后一个闰年
for ($i = 0; $i < 5; $i++){
if(self::isLeapYear($endLeapYear)){
break;
}
$sEgeneralYears++;
$endLeapYear--;
}
//整百的1700 1800 1900 2100 不是瑞年
$noleap100th = self::get100th($firstLeapYear, $endLeapYear);
$modGapYears = $endLeapYear - $firstLeapYear;
$leapYears = ($modGapYears) / 4;
$generalYears = $leapYears * 3; $leapYears = $leapYears + 1 - $noleap100th;//加上边界 减去整100
$generalYears += $noleap100th;//加上整100平年
//加上收尾的平年
$generalYears += $sEgeneralYears;
return array('leapYears' => $leapYears, 'generalYears' => $generalYears);
}
//整百的1700 1800 1900 2100 不是瑞年
public static function get100th($sy, $ey){
$c = 0;
foreach (array(1700,1800,1900,2100) as $y){
if ($sy <= $y && $y<= $ey) {
$c++;
}
}
return $c;
}
//获取公历月份天数
public static function getMonthDays($month, $isLeap){
$month = (int)$month;
if ($month == 2) {
return $isLeap ? 29 : 28;
}
//1-12月分别为31天,29天,31天,30天,31天,30天,31天,31天,30天,31天,30天,31天
return in_array($month, array(1,3,5,7,8,10,12)) ? 31 : 30;
}
//获取年干支
public static function getYearGanZhi( $year){
$year = (int)$year;
//计算年柱时用的天干/地支排列
$aYearZhuTianGan = array(7,8,9,10,1,2,3,4,5,6);
$aYearZhuDizhi = array(9,10,11,12,1,2,3,4,5,6,7,8);
$yearTianGan = $aYearZhuTianGan[substr($year, -1)];
$yearDiZhi = $aYearZhuDizhi[$year % 12];
return array('yearTianGan' => $yearTianGan, 'yearDiZhi' => $yearDiZhi);
}
//获取某一年的所有月干支
/**
*
* @param unknown $year
* @param string $lunar true 阴历 false 阳历
*/
public static function getMonthsGanZhiByYear($year, $lunar = false){
$year = (int)$year; //立春在2月,先取二月的干支
$aYearZhuTianGan = array(7,8,9,10,1,2,3,4,5,6);
$yearTianGan = $aYearZhuTianGan[substr($year, -1)]; $aYearFirstMonthTiangan = array(
1 => 3,
2 => 5,
3 => 7,
4 => 9,
5 => 1,
6 => 3,
7 => 5,
8 => 7,
9 => 9,
10 => 1);
$monthTianGan = $aYearFirstMonthTiangan[$yearTianGan];
$monthDiZhi = 3;//自立春日起固定为寅(从立春当天到惊蛰前一天) $loopTianGan = $monthTianGan;
$loopDiZhi = $monthDiZhi; if ($lunar == true) {
$leapMonth = self::getLeapMonth($year);
$monthCount = $leapMonth > 0 ? 13 : 12;
$isLeapSta = 0;
for ($i = 1; $i<=$monthCount; $i++){
$month = $i;
$isleap = 0;
if($isLeapSta == 1){
$month = $i - 1;
$isleap = 1;
$isLeapSta = 2;
}elseif ($isLeapSta == 2){
//闰月后的月份
$month = $i - 1;
} $aData[] = array('month' => $month, 'isleap' => $isleap, 'tiangan' => $loopTianGan,'dizhi' => $loopDiZhi); //这里必须放后面
if(($leapMonth == $i) && ($isLeapSta == 0)){
$isLeapSta = 1;
}
$loopTianGan++;
$loopTianGan = $loopTianGan == 11 ? 1 : $loopTianGan; $loopDiZhi++;
$loopDiZhi = $loopDiZhi == 13 ? 1 : $loopDiZhi;
}
}else{
//1月的干支
$oneMonthTianGan = $monthTianGan - 1;
$oneMonthTianGan = $oneMonthTianGan == 0 ? 10 : $oneMonthTianGan;
$oneMonthDiZhi = 2; $aData = array();
$aData[] = array('month' => 1, 'tiangan' => $oneMonthTianGan, 'dizhi' => $oneMonthDiZhi);
$aData[] = array('month' => 2, 'tiangan' => $monthTianGan, 'dizhi' => $monthDiZhi); for ($i=3; $i<=12; $i++){
$loopTianGan++;
$loopTianGan = $loopTianGan == 11 ? 1 : $loopTianGan; $loopDiZhi++;
$loopDiZhi = $loopDiZhi == 13 ? 1 : $loopDiZhi;
$aData[] = array('month' => $i, 'tiangan' => $loopTianGan, 'dizhi' => $loopDiZhi);
}
}
return $aData;
}
/**
* 获取阳历某月的数据
* @param unknown $year
* @param unknown $month
*/
public static function getSolarMonthData($year, $month){
//1600-1-1日 星期六 辛酉日
//阳历月份天数
$days = self::getMonthDays($month, self::isLeapYear($year)); $startDate = '1600-01-01';//辛酉日
$startTianGan = 8;
$startDiZhi = 10;
$startW = 6;//星期六
$deffDays = calendarswach::getGapDays($startDate, "$year-$month-01") ; $aData = array();
for ($i = 1; $i<= $days; $i++){
$aLunarDate = self::convertSolarToLunar($year, $month, $i);
$aLunar = explode('-', $aLunarDate[0]);
$week = ($startW + $deffDays) % 7; $dayTianGan = ($startTianGan + $deffDays) % 10;
if ($dayTianGan == 0) {
$dayTianGan = 10;
} $dayDiZhi = ($startDiZhi + $deffDays) % 12;
if ($dayDiZhi == 0) {
$dayDiZhi = 12;
} $aTemp = array();
$aTemp['sd'] = $i;//阳历日期
$aTemp['ly'] = (int)$aLunar[0];//阴历年
$aTemp['lm'] = (int)$aLunar[1];//阴历月
$aTemp['ld'] = (int)$aLunar[2];//阴历日
$aTemp['leap'] = $aLunarDate[1] ? $aTemp['lm'] : 0;//闰几月
$aTemp['w'] = $week;//星期几
$aTemp['tg'] = $dayTianGan;//天干
$aTemp['dz'] = $dayDiZhi;//地支
$aData[] = $aTemp; $deffDays++;//间隔天数+1
}
return $aData;
}
/**
* 获取阴历某月的数据
* @param unknown $year
* @param unknown $month
*/
public static function getLunarMonthData($year, $month, $leapMonth){
$month = $leapMonth ? $month +1 : $month;
$sdate = self::convertLunarToSolar($year, $month, '1');
$aSolar = explode('-', $sdate);
$sy = (int)$aSolar[0];
$sm = (int)$aSolar[1];
$sd = (int)$aSolar[2]; $startDate = '1600-01-01';//辛酉日
$startTianGan = 8;
$startDiZhi = 10;
$startW = 6;//星期六
$deffDays = calendarswach::getGapDays($startDate, "$sy-$sm-$sd") ;//阳历相隔天数
//阴历大月30天
$monthDays = self::getLunarMonthDays($year, $month);
$aData = array();
for ($i=1; $i<=$monthDays; $i++){
$sdate = self::convertLunarToSolar($year, $month, $i);
$aSolar = explode('-', $sdate);
$week = ($startW + $deffDays) % 7; $dayTianGan = ($startTianGan + $deffDays) % 10;
if ($dayTianGan == 0) {
$dayTianGan = 10;
} $dayDiZhi = ($startDiZhi + $deffDays) % 12;
if ($dayDiZhi == 0) {
$dayDiZhi = 12;
} $aTemp = array();
$aTemp['ld'] = $i;//阴历日期
$aTemp['sy'] = (int)$aSolar[0];//阳历年
$aTemp['sm'] = (int)$aSolar[1];//阳历月
$aTemp['sd'] = (int)$aSolar[2];//阳历日
$aTemp['leap'] = $leapMonth;//闰几月
$aTemp['w'] = $week;//星期几
$aTemp['tg'] = $dayTianGan;//天干
$aTemp['dz'] = $dayDiZhi;//地支
$aData[] = $aTemp;
$deffDays++;//间隔天数+1
}
return $aData;
}
//获取日 时干支
public static function getDayHourGanZhis($dayTianGan){
$aDayFirstHourTiangan = array(
1 => 1,
2 => 3,
3 => 5,
4 => 7,
5 => 9,
6 => 1,
7 => 3,
8 => 5,
9 => 7,
10 => 9
);
$aData = array();
for ($hour=0;$hour<=23;$hour++){
$tmpDayTianGan = $dayTianGan;//日天干
$tempHour = ($hour % 2) == 0 ? $hour + 2 : $hour + 3; //奇数+3 偶数 +2
$tempHour = $tempHour % 24;
$hourDiZhi = $tempHour / 2; //每两小时一个时辰
if ($hourDiZhi == 0) {
$hourDiZhi = 12;
} if ($hour > 22) {////时间计算
$tmpDayTianGan = ($tmpDayTianGan + 1) % 10;
$tmpDayTianGan = ($tmpDayTianGan == 0 ) ? 10 : $tmpDayTianGan;
}
$dayFirstTianGan = $aDayFirstHourTiangan[$tmpDayTianGan];
$hourTianGan = ($dayFirstTianGan + ($hourDiZhi - 1)) % 10;
$hourTianGan = ($hourTianGan == 0 ) ? 10 : $hourTianGan;
$aTemp = array('h' => $hour, 'tg' => $hourTianGan, 'dz' => $hourDiZhi); $aData[] = $aTemp;
}
return $aData;
} } //$ba = gongliNongli::convertLunarToSolar(1924,1,1);

  

参考资料

[1]如何判断闰月

http://www.cnblogs.com/BpLoveGcy/archive/2010/03/29/1700085.html

[2]闰年知识科普

http://baike.baidu.com/subview/29649/7344239.htm

计算两个日期之间相差的年数月数天数(JS实现)的更多相关文章

  1. js 计算两个日期之间 相差几年几月几日

    1.计算日期差 Mine.vue <!-- 我的 --> <template> <div> <!-- 标题栏 --> <x-header :lef ...

  2. 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd和YYYY-mm-dd HH:mm:ss

    /** * 计算两个日期之间相差的天数(带带负数) 支持格式YYYY-mm-dd比较 * @param higDate 减数 * @param lowDate 被减数 * @returns 差值天数 ...

  3. tp5 计算两个日期之间相差的天数

    //两个日期之间相差的天数 function diffBetweenTwoDays ($day1, $day2) { $second1 = strtotime($day1); $second2 = s ...

  4. C#计算两个日期之间相差的天数

    说明:如:1900-01-01与1900-01-01之间算一天 private static int DateDiff(DateTime dateStart, DateTime dateEnd) { ...

  5. C#中如何获得两个日期之间的天数差 ( c# 计算两个日期之间相差的天数 )

    DateTime dtLast = new DateTime(Convert.ToInt32(LastMenses.Year), Convert.ToInt32(LastMenses.Month), ...

  6. java计算两个日期之间相隔的天数

    import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; impor ...

  7. java中计算两个日期之间天数的程序设计。

    //用java编写出一个以下方法计算两个日期之间天数的程序设计. import java.util.regex.Matcher; import java.util.regex.Pattern; pub ...

  8. mysql查询两个日期之间相差多少天?

    需求描述: 在mysql中,查看两个日期之间相差多少天 操作过程: 1.通过datediff函数,查看两个日期之间相差多少天 mysql> select datediff('2018-06-26 ...

  9. JS计算两个日期之间的天数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 多物体运动框架案例一:多个Div的宽度运动变化

    多物体运动框架,鼠标移入Div,此Div逐渐变宽,鼠标移出后,此Div逐渐缩短恢复原长度. <!doctype html> <html> <head> <ti ...

  2. Linux搭建tomcat文件服务器

    Linux搭建tomcat文件服务器 Linux下配置Tomcat服务器和Windows下其实差不多,可以去官网下载安装包释放或者在线下载,只是当时下载的windows.zip文件,现在下载.tar. ...

  3. 在3D中两条射线的相交性检测

    摘自[3D数学基础: 图形与游戏开发] 考虑在3D中两条以参数形式定义的射线: \(\vec{r_1}(t_1)=\vec{p_1}+t_1\vec{d_1}\) \(\vec{r_2}(t_2)=\ ...

  4. Android 签名(5)用命令签名和用android studio,eclipse签名

    1,用命令签名 无论用哪个 IDE 开发,最终只是用了 keytool 和 jarsigner 这两个 Java 工具来完成签名任务(在 jdk 的 bin 目录下).其中 keytool 用来生成 ...

  5. 跨服务器进行SQL Server数据库的数据处理

    exec sp_addlinkedserver 'ITDB', ' ', 'SQLOLEDB', '服务器IP' exec sp_addlinkedsrvlogin 'ITDB', 'false ', ...

  6. Linq学习(五)-多表连接

    本将主要介绍 内连接与 外连接 1.join Linq to sql from a in Blog_Users join b in Blog_UserInfo on a.UserId equals b ...

  7. 使用Hexo搭建个人博客配置全过程

    大致过程分为: 1.搭建Node.js 环境 2. 搭建Git 环境 3.安装配置Hexo 4.GitHub 注册和配置 5. 关联Hexo 与 GitHub Pages 7.Hexo的常用操作 下面 ...

  8. JS高级——Function原型链

    基本概念 1.函数可以通过Function new出来,那么Function可以被称作构造函数,被new出来的函数可以被称为一个对象 2.Function既然是构造函数,那么肯定也有原型,它的原型是一 ...

  9. drf06 认证Authentication 权限Permissions 限流Throttling

    为了方便接下来的学习,我们创建一个新的子应用 four python manage.py startapp four 因为接下来的功能中需要使用到登陆功能,所以我们使用django内置admin站点并 ...

  10. 图表实现基于SVG或Canvas

    Highcharts 基于SVG,方便自己定制,但图表类型有限. Echarts 基于Canvas,适用于数据量比较大的情况. D3.v3 基于SVG,方便自己定制:D3.v4支持Canvas+SVG ...