python计算两个日期天数差值

  • 从一个博主那里看的,自己思路改了一点,博主地址在下面

# 判断是否是闰年
def isLeapYear(year):
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        return True
    else:
        return False


# year1为起始日期,year2为终止日期
# 判断year1是否为闰年,选择year1当年每月的天数列表
def dayBetweenDates(year1, month1, day1, year2, month2, day2):
    if isLeapYear(year1):
        print(str(year1)+':闰年')
        dayofmonth1 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]   # 列表下标从0开始的 所以后面计算月份天数的时候,传入的月份应该-1
    else:
        print(str(year1) + ':非闰年')
        dayofmonth1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

    year_temp = year2 - year1
    month_temp = month2 - month1

    if year_temp == 0:
        if month_temp == 0:
            days = day2 - day1
        else:
            # days = dayofmonth1[month1 - 1] - day1 + day2  # '掐头去尾'
            i = 1
            sum = 0
            #假设计算3月5号到6月4号的天数,先计算3,4,5月的总天数,所以是 [month1 + i - 1-1],然后减去5,加上4
            while i < month_temp + 1:
                day = dayofmonth1[month1 + i - 1-1]
                sum += day
                i+=1
            days = sum - day1 + day2
    else:
        if isLeapYear(year2):
            dayofmonth2 = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            year_days = 366
        else:
            dayofmonth2 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
            year_days = 365
        i = 1
        sum1 = 0
        sum2 = 0
        middle_year_sum_days=0

        # 获取小年份剩余的天数
        while i < month1:
            day = dayofmonth1[month1 - i-1]
            sum1 += day
            i += 1
        other_days1 = year_days - sum1 - day1

        # 获取大年份经过的天数
        i=1
        while i < month2:
            day = dayofmonth2[month2 - i-1]
            sum2 += day
            i += 1
        other_days2 = sum2 + day2

        # 获取中间年份的天数
        i=1
        while i < year_temp:
            middle_year = year1+i
            if isLeapYear(middle_year):
                year_day=366
            else:
                year_day=365
            middle_year_sum_days+=year_day
            i+=1
        days=middle_year_sum_days+other_days1+other_days2

    return days

# 2014 1.25   2018.3.26
days=dayBetweenDates(2014,1,25,2018,3,26)
print(days)

原文作者:Fiona_yuyu
来源:CSDN
原文:https://blog.csdn.net/sinat_22581761/article/details/78229166

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值