在Zapier中,我有两个日期,我试图在代码步骤中找到它们之间的天数。我在每个日期上运行Formatter Step以输出YYYY-MM-DD格式的日期时间对象,然后运行以下代码:
submit = input['submit_date']
event = input['event_date']
delta = event-submit
numdays = delta.days
return {'numdays': numdays}
我得到的错误表明我导入的两个日期是字符串,而不是日期时间。
错误如下:
Your code had an error! Traceback (most recent call last): File "/tmp/tmp7xyg3Z/usercode.py", line 10, in the_function delta = event-submit TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode'
不包括格式化程序步骤,但通常您需要时间或日期时间对象(import time
或import datetime
)
您可能应该从datetime选项中查看datetime.strptime(date_string, format)
之类的东西,以获取文本字符串并将其转换为日期/时间对象。
https://docs.python.org/2/library/datetime.html strftime-strptime-behavior
我有两个方法get_days(start_date, end_date)
和increment_da_day(str_date)
调用get_days()
,它返回一个日期列表(格式为yyyymmdd),您可以提供开始日期和结束日期并打印get_days(start_date, end_date) - 1
def get_days(start_date, end_date):
"""returns a list of days"""
all_days = []
starts = start_date
all_days.append(starts)
while int(starts) < int(end_date):
starts = increment_a_day(starts)
all_days.append(starts)
return all_days
def increment_a_day(str_date):
"""increments a day for given date string in format yyyymmdd"""
year = int(str_date[:4])
month = int(str_date[4:6])
day = int(str_date[-2:])
now = datetime.date(year, month, day)
delta = datetime.timedelta(days=1)
return (now + delta).strftime('%Y%m%d') #yyyymmdd
你只需要做以下事情:
days = get_days("20160601", "20160602")
delta = len(days) - 1
print delta
如果它们是字符串,则可以传递输入或直接接受输入,下面的代码将返回天数
def h():
from datetime import datetime
date_format = "%m/%d/%Y"
a = datetime.strptime(input('Enter first date in MM/DD/YY format '), date_format)
b = datetime.strptime(input('Enter second date in MM/DD/YY format '), date_format)
delta = b - a
print (delta.days)
return int(delta.days)
或
a='8/18/2008'
b='9/26/2008'
def h(c,d):
from datetime import datetime
date_format = "%m/%d/%Y"
a = datetime.strptime(c, date_format)
b = datetime.strptime(d, date_format)
delta = b - a
print (delta.days)
return int(delta.days)