两个日期之间有几年几个月几天
7 个解决方案
#1
我觉得只能大概的知道有几年几月,或者多少天
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月
另外就是直接取日期字符串中的前四位成long,两个值相减得年份,6~7成long,两个值相减成月份
至于说的几年几月几天就不好办了,每年的数据严格的讲是不一样的,总之比较麻烦,呵呵
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月
另外就是直接取日期字符串中的前四位成long,两个值相减得年份,6~7成long,两个值相减成月份
至于说的几年几月几天就不好办了,每年的数据严格的讲是不一样的,总之比较麻烦,呵呵
#2
这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
#3
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月 这个方法好像不行 有2月的28天在里面会出问题
(2006 * 12 + 3) - (1998 * 12 + 2) = 97这个方法什么原理 好像月份是对的
(2006 * 12 + 3) - (1998 * 12 + 2) = 97这个方法什么原理 好像月份是对的
#4
date ld_date,ld_date1
time lt_time,lt_time1
datetime adtm_start,adtm_end
long ll_total_seconds, ll_day_adjust
date ld_sdate, ld_edate
time lt_stime, lt_etime
ld_Date = date(left(em_1.text,10))
lt_time =time(right(em_1.text,8))
adtm_end =datetime(ld_date,lt_time)
ld_date1=date(left(em_4.text,10))
lt_time1 =time(right(em_4.text,8))
adtm_start=datetime(ld_date1,lt_time1)
ld_sdate = date(adtm_start)
ld_edate = date(adtm_end)
lt_stime = time(adtm_start)
lt_etime = time(adtm_end)
If ld_sdate = ld_edate then
ll_total_seconds = secondsafter( lt_stime,lt_etime)
Elseif ld_sdate < ld_edate Then
ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
Else
ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
end If
int li_days,li_hour,li_minute
li_minute = ll_total_seconds/60
li_days=ll_total_seconds/86400
li_hour=((ll_total_seconds)-(86400*(li_days)))/3600
li_minute=((((ll_total_seconds)-(li_days*(86400))))-((li_hour)*3600))/60
sle_3.text=string(li_days)+'天'+string(li_hour)+'小时'+string(li_minute)+'分钟'
time lt_time,lt_time1
datetime adtm_start,adtm_end
long ll_total_seconds, ll_day_adjust
date ld_sdate, ld_edate
time lt_stime, lt_etime
ld_Date = date(left(em_1.text,10))
lt_time =time(right(em_1.text,8))
adtm_end =datetime(ld_date,lt_time)
ld_date1=date(left(em_4.text,10))
lt_time1 =time(right(em_4.text,8))
adtm_start=datetime(ld_date1,lt_time1)
ld_sdate = date(adtm_start)
ld_edate = date(adtm_end)
lt_stime = time(adtm_start)
lt_etime = time(adtm_end)
If ld_sdate = ld_edate then
ll_total_seconds = secondsafter( lt_stime,lt_etime)
Elseif ld_sdate < ld_edate Then
ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
Else
ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
end If
int li_days,li_hour,li_minute
li_minute = ll_total_seconds/60
li_days=ll_total_seconds/86400
li_hour=((ll_total_seconds)-(86400*(li_days)))/3600
li_minute=((((ll_total_seconds)-(li_days*(86400))))-((li_hour)*3600))/60
sle_3.text=string(li_days)+'天'+string(li_hour)+'小时'+string(li_minute)+'分钟'
#5
不用时间的,就是合同签订的时间,只有日期date,不是datetime类型的,也不用精确到小时、分什么,
但是这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
这个我试验了一下还是不行,算2004-06-20至2005-06-19还行,可是有的合同时间是2004-06-01至2005-05-31就不行了 这2个都是一年,但结果不都是12个月
请大家帮忙啊,什么好办法啊!!!!
但是这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
这个我试验了一下还是不行,算2004-06-20至2005-06-19还行,可是有的合同时间是2004-06-01至2005-05-31就不行了 这2个都是一年,但结果不都是12个月
请大家帮忙啊,什么好办法啊!!!!
#6
算成月吧 这样好算点的 写个函数 我写了个你看看色
long n,y,z
IF (long(left(zzsj,4))-long(left(qssj,4)))>0 then
y=(12 - long(right(qssj,2))+1)+long(right(zzsj,2))
n=(long(left(zzsj,4)) - long(left(qssj,4))-1)*12
z=y+n
else
z=long(right(zzsj,2))-long(right(qssj,2))+1
end if
return z
long n,y,z
IF (long(left(zzsj,4))-long(left(qssj,4)))>0 then
y=(12 - long(right(qssj,2))+1)+long(right(zzsj,2))
n=(long(left(zzsj,4)) - long(left(qssj,4))-1)*12
z=y+n
else
z=long(right(zzsj,2))-long(right(qssj,2))+1
end if
return z
#7
补充一下 zzsj终止时间 qssj起始时间 是一个参数
#1
我觉得只能大概的知道有几年几月,或者多少天
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月
另外就是直接取日期字符串中的前四位成long,两个值相减得年份,6~7成long,两个值相减成月份
至于说的几年几月几天就不好办了,每年的数据严格的讲是不一样的,总之比较麻烦,呵呵
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月
另外就是直接取日期字符串中的前四位成long,两个值相减得年份,6~7成long,两个值相减成月份
至于说的几年几月几天就不好办了,每年的数据严格的讲是不一样的,总之比较麻烦,呵呵
#2
这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
#3
有一种办法就是 DaysAfter得到天数/365=年,余数/30=月 这个方法好像不行 有2月的28天在里面会出问题
(2006 * 12 + 3) - (1998 * 12 + 2) = 97这个方法什么原理 好像月份是对的
(2006 * 12 + 3) - (1998 * 12 + 2) = 97这个方法什么原理 好像月份是对的
#4
date ld_date,ld_date1
time lt_time,lt_time1
datetime adtm_start,adtm_end
long ll_total_seconds, ll_day_adjust
date ld_sdate, ld_edate
time lt_stime, lt_etime
ld_Date = date(left(em_1.text,10))
lt_time =time(right(em_1.text,8))
adtm_end =datetime(ld_date,lt_time)
ld_date1=date(left(em_4.text,10))
lt_time1 =time(right(em_4.text,8))
adtm_start=datetime(ld_date1,lt_time1)
ld_sdate = date(adtm_start)
ld_edate = date(adtm_end)
lt_stime = time(adtm_start)
lt_etime = time(adtm_end)
If ld_sdate = ld_edate then
ll_total_seconds = secondsafter( lt_stime,lt_etime)
Elseif ld_sdate < ld_edate Then
ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
Else
ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
end If
int li_days,li_hour,li_minute
li_minute = ll_total_seconds/60
li_days=ll_total_seconds/86400
li_hour=((ll_total_seconds)-(86400*(li_days)))/3600
li_minute=((((ll_total_seconds)-(li_days*(86400))))-((li_hour)*3600))/60
sle_3.text=string(li_days)+'天'+string(li_hour)+'小时'+string(li_minute)+'分钟'
time lt_time,lt_time1
datetime adtm_start,adtm_end
long ll_total_seconds, ll_day_adjust
date ld_sdate, ld_edate
time lt_stime, lt_etime
ld_Date = date(left(em_1.text,10))
lt_time =time(right(em_1.text,8))
adtm_end =datetime(ld_date,lt_time)
ld_date1=date(left(em_4.text,10))
lt_time1 =time(right(em_4.text,8))
adtm_start=datetime(ld_date1,lt_time1)
ld_sdate = date(adtm_start)
ld_edate = date(adtm_end)
lt_stime = time(adtm_start)
lt_etime = time(adtm_end)
If ld_sdate = ld_edate then
ll_total_seconds = secondsafter( lt_stime,lt_etime)
Elseif ld_sdate < ld_edate Then
ll_total_seconds = SecondsAfter(lt_stime,Time('23:59:59'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) -1
If ll_day_adjust > 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('00:00:00'),lt_etime) +1
Else
ll_total_seconds = SecondsAfter(lt_stime,Time('00:00:00'))
ll_day_adjust = DaysAfter(ld_sdate,ld_edate) +1
If ll_day_adjust < 0 Then ll_total_seconds = ll_total_seconds + 86400 * ll_day_adjust
ll_total_seconds = ll_total_seconds + SecondsAfter(Time('23:59:59'),lt_etime) -1
end If
int li_days,li_hour,li_minute
li_minute = ll_total_seconds/60
li_days=ll_total_seconds/86400
li_hour=((ll_total_seconds)-(86400*(li_days)))/3600
li_minute=((((ll_total_seconds)-(li_days*(86400))))-((li_hour)*3600))/60
sle_3.text=string(li_days)+'天'+string(li_hour)+'小时'+string(li_minute)+'分钟'
#5
不用时间的,就是合同签订的时间,只有日期date,不是datetime类型的,也不用精确到小时、分什么,
但是这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
这个我试验了一下还是不行,算2004-06-20至2005-06-19还行,可是有的合同时间是2004-06-01至2005-05-31就不行了 这2个都是一年,但结果不都是12个月
请大家帮忙啊,什么好办法啊!!!!
但是这么来算 (年*12+月) - (年*12+月) 即可算出
如1998-02-01和2006-03-01
(2006 * 12 + 3) - (1998 * 12 + 2) = 97
这个我试验了一下还是不行,算2004-06-20至2005-06-19还行,可是有的合同时间是2004-06-01至2005-05-31就不行了 这2个都是一年,但结果不都是12个月
请大家帮忙啊,什么好办法啊!!!!
#6
算成月吧 这样好算点的 写个函数 我写了个你看看色
long n,y,z
IF (long(left(zzsj,4))-long(left(qssj,4)))>0 then
y=(12 - long(right(qssj,2))+1)+long(right(zzsj,2))
n=(long(left(zzsj,4)) - long(left(qssj,4))-1)*12
z=y+n
else
z=long(right(zzsj,2))-long(right(qssj,2))+1
end if
return z
long n,y,z
IF (long(left(zzsj,4))-long(left(qssj,4)))>0 then
y=(12 - long(right(qssj,2))+1)+long(right(zzsj,2))
n=(long(left(zzsj,4)) - long(left(qssj,4))-1)*12
z=y+n
else
z=long(right(zzsj,2))-long(right(qssj,2))+1
end if
return z
#7
补充一下 zzsj终止时间 qssj起始时间 是一个参数