首页 > 解决方案 > 我需要从当前日期加上 7 天减去一个基准日期;但不确定如何计算年份的变化?

问题描述

PaymentDate = datetime.now().timetuple().tm_yday + 7
NS_Date_Text = driver.find_element(By.ID, "custrecord_ps_inv_date_val").text
basedate = datetime.strptime(NS_Date_Text, '%m/%d/%Y')
basedate1 = datetime.timetuple(basedate).tm_yday
DaysUntilPayment = PaymentDate - basedate1

到目前为止,此代码适用于 2019 年。但是,我不确定如何计算 2020 年或 2018 年

因此,我将当前日期转换为一年中的天数(1 月 1 日为 1,12 月 31 日为 365/366),然后在该数字上加 7。这是付款日期

然后,我在网页上找到一个日期(BaseDate)并将该数字转换为一年中的某一天。

然后减去这两个数字。

如果当前日期是:2020 年 1 月 10 日(第 10 天)+ 7 = 第 17 天,我不确定它的效果如何。但基准日期是 2019 年 12 月 28 日(第 362 天)。

我将得到的数字是 345,这太超前了,而我需要数字(DaysUntilPayment)为 20。

我希望我能够很好地解释这一点。有问题请lmk!

标签: pythonseleniumdatetimeselenium-chromedriver

解决方案


你让这种方式比它需要的更复杂。Python 的datetime.date()对象知道如何自己处理增量;如果你减去两个date()对象,你会得到一个timedelta()实例,它有一个.days属性。

接下来,您可以创建自己的timedelta()对象以将 7 天添加到“今天”:

from datetime import date, timedelta

# 7 days from today
payment_date = date.today() + timedelta(days=7)

# find base date on the webpage
ns_date_text = driver.find_element(By.ID, "custrecord_ps_inv_date_val").text
basedate = datetime.strptime(ns_date_text, '%m/%d/%Y').date()

# calculate the difference in days between these two dates
# date - date = timedelta, so take the .days attribute from that result
days_until_payment = (payment_date - basedate).days

请注意,我只使用了结果的日期部分datetime.strptime()datetime您也可以使用对象完成所有这些操作,但是您可能不得不担心时区等问题,而不必这样做会更容易。

这些操作负责处理年份等细节,更重要的是,处理闰年:

>>> from datetime import date, datetime, timedelta
>>> payment_date = date(2020, 2, 22) + timedelta(days=7)
>>> payment_date   # this is February 29th, a leap day!
datetime.date(2020, 2, 29)
>>> basedate = datetime.strptime("12/31/2019", '%m/%d/%Y').date  # last day of 2019
>>> payment_date - basedate
datetime.timedelta(days=60)
>>> (payment_date - basedate).days  # February 29th is 60 days later
60

有关更多详细信息,请参阅datetime.date文档,其中包含支持的操作部分,其中包含:

date2 = date1 + timedelta
date2timedelta.days删除的天数date1

timedelta = date1 - date2
这是准确的,不能溢出。timedelta.seconds并且timedelta.microseconds0date2 + timedelta == date1之后。


推荐阅读