dvlyadmin_pro/backend/utils/datetime_utils.py
2025-03-18 08:46:50 +08:00

194 lines
6.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#时间日期工具箱
#author:lybbn
#QQ:1042594286
#programe:django-vue-lyadmin
#date:2023-12-17
#version:v1.1
import re
import datetime
def convertstr2datetime(string,arg="%Y-%m-%d %H:%M:%S"):
return datetime.datetime.strptime(string, arg)
def getTodayRange():
"""
获取今天时间范围如2023-08-02 00:00:01,2023-08-02 23:59:59
"""
now = datetime.datetime.now()
dtstr = now.strftime('%Y-%m-%d')
starttime = dtstr+" 00:00:01"
endtime = dtstr + " 23:59:59"
return starttime,endtime
def getLastdayRange():
"""
获取昨天时间范围如2023-08-02 00:00:01,2023-08-02 23:59:59
"""
now = datetime.datetime.now()
last_date = now + datetime.timedelta(days=-1) # 昨天
dtstr = last_date.strftime('%Y-%m-%d')
starttime = dtstr+" 00:00:01"
endtime = dtstr + " 23:59:59"
return starttime,endtime
def getLastdayRangeDate():
"""
获取昨天时间范围如2023-08-02,2023-08-02
"""
now = datetime.datetime.now()
last_date = now + datetime.timedelta(days=-1) # 昨天
dtstr = last_date.strftime('%Y-%m-%d')
starttime = dtstr
endtime = dtstr
return starttime,endtime
def getdayRangeDateByString(string):
"""
根据字符串含义获取日期:(最大30天前日期)
获取昨天时间范围如: string = last1day 取值昨天日期2023-08-02,2023-08-02
"""
REGEX_STRING = "^last\d+day$"
nums = re.findall("\d+", string)
num = int(nums[0])
if num>30:
num = 30
now = datetime.datetime.now()
last_date = now + datetime.timedelta(days=-num)
dtstr = last_date.strftime('%Y-%m-%d')
starttime = dtstr
endtime = dtstr
return starttime,endtime
def get7daysRange():
"""
获取近7天时间范围如2023-08-02 00:00:01,2023-08-02 23:59:59
"""
now = datetime.datetime.now()
data7 = now + datetime.timedelta(days=-7)
nowstr = now.strftime('%Y-%m-%d')
last_dtstr = data7.strftime('%Y-%m-%d')
starttime = last_dtstr+" 00:00:01"
endtime = nowstr + " 23:59:59"
return starttime,endtime
def get30daysRange():
"""
获取近30天时间范围如2023-08-02 00:00:01,2023-08-02 23:59:59
"""
now = datetime.datetime.now()
last_date = now + datetime.timedelta(days=-30)
nowstr = now.strftime('%Y-%m-%d')
last_dtstr = last_date.strftime('%Y-%m-%d')
starttime = last_dtstr+" 00:00:01"
endtime = nowstr + " 23:59:59"
return starttime,endtime
def getCurrentMonthRange():
"""
获取本月时间范围如2023-08-01 00:00:01,2023-08-31 23:59:59
"""
now = datetime.datetime.now()
nowday = now.day
nowday =str(nowday) if len(str(nowday)) >1 else "0"+str(nowday)
nowyear = now.year
nowmonth = now.month
starttime = str(nowyear)+"-"+str(nowmonth)+"-01"+" 00:00:01"
endtime = str(nowyear)+"-"+str(nowmonth)+"-"+ nowday + " 23:59:59"
return starttime,endtime
def getCurrentMonthRangeDate():
"""
获取本月时间范围如2023-08-01,2023-08-31
"""
now = datetime.datetime.now()
nowday = now.day
nowday =str(nowday) if len(str(nowday)) >1 else "0"+str(nowday)
nowyear = now.year
nowmonth = now.month
starttime = str(nowyear)+"-"+str(nowmonth)+"-01"
endtime = str(nowyear)+"-"+str(nowmonth)+"-"+ nowday
return starttime,endtime
def getLastMonthRange():
"""
获取上个月时间范围如2023-08-02 00:00:01,2023-08-02 23:59:59
"""
now = datetime.datetime.now()
this_month_start = datetime.datetime(now.year, now.month, 1)
last_month_end = this_month_start - datetime.timedelta(days=1) + datetime.timedelta(hours=23, minutes=59, seconds=59)
last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)
starttime = last_month_start.strftime('%Y-%m-%d')+" 00:00:01"
endtime = last_month_end.strftime('%Y-%m-%d') + " 23:59:59"
return starttime,endtime
def getLastMonthRangeDate():
"""
获取上个月时间范围如2023-08-01,2023-08-31
"""
now = datetime.datetime.now()
this_month_start = datetime.datetime(now.year, now.month, 1)
last_month_end = this_month_start - datetime.timedelta(days=1) + datetime.timedelta(hours=23, minutes=59, seconds=59)
last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)
starttime = last_month_start.strftime('%Y-%m-%d')
endtime = last_month_end.strftime('%Y-%m-%d')
return starttime,endtime
def getLast2MonthRangeDate():
"""
获取上上个月时间范围如2023-08-01,2023-08-31
"""
now = datetime.datetime.now()
this_month_start = datetime.datetime(now.year, now.month, 1)
last_month_end = this_month_start - datetime.timedelta(days=1) + datetime.timedelta(hours=23, minutes=59, seconds=59)
last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)
last_2month_end = last_month_start - datetime.timedelta(days=1) + datetime.timedelta(hours=23, minutes=59,seconds=59)
last_2month_start = datetime.datetime(last_2month_end.year, last_2month_end.month, 1)
starttime = last_2month_start.strftime('%Y-%m-%d')
endtime = last_2month_end.strftime('%Y-%m-%d')
return starttime,endtime
def getCurrentWeekRangeDate():
"""
获取本周的日期范围
"""
monday, sunday = datetime.date.today(), datetime.date.today()
one_day = datetime.timedelta(days=1)
while monday.weekday() != 0:
monday -= one_day
while sunday.weekday() != 6:
sunday += one_day
# 返回时间字符串
return datetime.datetime.strftime(monday, "%Y-%m-%d"), datetime.datetime.strftime(sunday, "%Y-%m-%d")
def getLast1WeekRangeDate():
"""
获取上周的日期范围
"""
today = datetime.datetime.today()
end_time = today - datetime.timedelta(days=today.isoweekday())
start_time = end_time - datetime.timedelta(days=6)
return start_time.strftime("%Y-%m-%d"), end_time.strftime("%Y-%m-%d")
def getLast2WeekRangeDate():
"""
获取上上周的日期范围
"""
std,edt = getLast1WeekRangeDate()
std = datetime.datetime.strptime(std, '%Y-%m-%d')
edt = datetime.datetime.strptime(edt, '%Y-%m-%d')
end_time = std - datetime.timedelta(days=1)
start_time = end_time - datetime.timedelta(days=6)
return start_time.strftime("%Y-%m-%d"), end_time.strftime("%Y-%m-%d")
def getLast3WeekRangeDate():
"""
获取上上上周的日期范围
"""
std,edt = getLast1WeekRangeDate()
std = datetime.datetime.strptime(std, '%Y-%m-%d')
edt = datetime.datetime.strptime(edt, '%Y-%m-%d')
end_time = std - datetime.timedelta(days=1)
start_time = end_time - datetime.timedelta(days=6)
return start_time.strftime("%Y-%m-%d"), end_time.strftime("%Y-%m-%d")