python 本周,上周,本月,上月,本季,上季,今年, 去年

0 评论
/ /
1042 阅读
/
11393 字
30 2019-01
#coding=utf-8
 
import datetime
from datetime import timedelta
 
now = datetime.datetime.now()
 
#今天
today = now
 
#昨天
yesterday = now - timedelta(days=1)
 
#明天
tomorrow = now + timedelta(days=1)<br><br>#当前季度

 

now_quarter = now.month / 3 if now.month % 3 == 0 else now.month / 3 + 1

 

#本周第一天和最后一天
this_week_start = now - timedelta(days=now.weekday())
this_week_end = now + timedelta(days=6-now.weekday())
 
#上周第一天和最后一天
last_week_start = now - timedelta(days=now.weekday()+7)
last_week_end = now - timedelta(days=now.weekday()+1)
 
#本月第一天和最后一天
this_month_start = datetime.datetime(now.year, now.month, 1)
this_month_end = datetime.datetime(now.year, now.month + 1, 1) - timedelta(days=1)
 
#上月第一天和最后一天
last_month_end = this_month_start - timedelta(days=1)
last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)
 
#本季第一天和最后一天
month = (now.month - 1) - (now.month - 1) % 3 + 1
this_quarter_start = datetime.datetime(now.year, month, 1)
this_quarter_end = datetime.datetime(now.year, month + 3, 1) - timedelta(days=1)
 
#上季第一天和最后一天
last_quarter_end = this_quarter_start - timedelta(days=1)
last_quarter_start = datetime.datetime(last_quarter_end.year, last_quarter_end.month - 2, 1)
 
#本年第一天和最后一天
this_year_start = datetime.datetime(now.year, 1, 1)
this_year_end = datetime.datetime(now.year + 1, 1, 1) - timedelta(days=1)
 
#去年第一天和最后一天
last_year_end = this_year_start - timedelta(days=1)
last_year_start = datetime.datetime(last_year_end.year, 1, 1)

例子1:

def get_this_date_and_last_date(date_type='day'):
    """

    :param date_type: 周 月 季 年
    {'last_date_start': '2018-01-01 00:00:00',
    'last_date_end': '2018-12-31 23:59:59',
    'this_date_start': '2019-01-01 00:00:00',
    'this_date_end': '2019-12-31 23:59:59'}
    :return:
    """
    # 今天
    now = datetime.datetime.now()
    date_dict = dict()
    if date_type == 'day':
        this_day = datetime.date.today()
        last_day = datetime.date.today()+ datetime.timedelta(days=-1)
        date_dict.update({"this_date_start": this_day,
                          "this_date_end": this_day,
                          "last_date_start": last_day,
                          "last_date_end": last_day})
    if date_type == 'week':
        # 本周第一天和最后一天
        this_week_start = now - timedelta(days=now.weekday())
        this_week_end = now + timedelta(days=6 - now.weekday())
        # 上周第一天和最后一天
        last_week_start = now - timedelta(days=now.weekday() + 7)
        last_week_end = now - timedelta(days=now.weekday() + 1)
        date_dict.update({"this_date_start": this_week_start,
                          "this_date_end": this_week_end,
                          "last_date_start": last_week_start,
                          "last_date_end": last_week_end})
    if date_type == 'month':
        # 本月第一天和最后一天
        this_month_start = datetime.datetime(now.year, now.month, 1)
        this_month_end = datetime.datetime(now.year, now.month + 1, 1) - timedelta(days=1)
        # 上月第一天和最后一天
        last_month_end = this_month_start - timedelta(days=1)
        last_month_start = datetime.datetime(last_month_end.year, last_month_end.month, 1)

        date_dict.update({"this_date_start": this_month_start,
                          "this_date_end": this_month_end,
                          "last_date_start": last_month_start,
                          "last_date_end": last_month_end})
    if date_type == 'quarter':
        # 本季第一天和最后一天
        month = (now.month - 1) - (now.month - 1) % 3 + 1
        this_quarter_start = datetime.datetime(now.year, month, 1)
        this_quarter_end = datetime.datetime(now.year, month + 3, 1) - timedelta(days=1)
        # 上季第一天和最后一天
        last_quarter_end = this_quarter_start - timedelta(days=1)
        last_quarter_start = datetime.datetime(last_quarter_end.year, last_quarter_end.month - 2, 1)
        date_dict.update({"this_date_start": this_quarter_start,
                          "this_date_end": this_quarter_end,
                          "last_date_start": last_quarter_start,
                          "last_date_end": last_quarter_end})
    if date_type == 'year':
        # 本年第一天和最后一天
        this_year_start = datetime.datetime(now.year, 1, 1)
        this_year_end = datetime.datetime(now.year + 1, 1, 1) - timedelta(days=1)
        # 去年第一天和最后一天
        last_year_end = this_year_start - timedelta(days=1)
        last_year_start = datetime.datetime(last_year_end.year, 1, 1)

        date_dict.update({"this_date_start": this_year_start,
                          "this_date_end": this_year_end,
                          "last_date_start": last_year_start,
                          "last_date_end": last_year_end})
    date_dict.update({"this_date_start": date_dict.get("this_date_start").strftime('%Y-%m-%d 00:00:00'),
                      "this_date_end": date_dict.get("this_date_end").strftime('%Y-%m-%d 23:59:59'),
                      "last_date_start": date_dict.get("last_date_start").strftime('%Y-%m-%d 00:00:00'),
                      "last_date_end": date_dict.get("last_date_end").strftime('%Y-%m-%d 23:59:59')})
    return date_dict


def get_mar12_year_month(num=12):
    """

    :param num: 12 前十二个的年份-月份{year_month: {start_date:'', end_date: ''}}
    num 最大值不能超过 13
    :return:
    """
    # 得到现在的时间  得到now等于2016年9月25日
    now = datetime.datetime.now()
    # 得到今年的的时间 (年份) 得到的today_year等于2016年
    today_year = now.year
    # 今年的时间减去1,得到去年的时间。last_year等于2015
    last_year = int(now.year) - 1
    # 得到今年的每个月的时间。today_year_months等于1 2 3 4 5 6 7 8 9,
    today_year_months = range(1, now.month + 1)
    # 得到去年的每个月的时间  last_year_months 等于10 11 12
    if num == 13:
        last_year_months = range(now.month, num)
    else:
        last_year_months = range(now.month + 1, num + 1)
    # 定义列表去年的数据
    data_list_lasts = list()
    # 通过for循环,得到去年的时间夹月份的列表
    # 先遍历去年每个月的列表
    for last_year_month in last_year_months:
        # 定义date_list 去年加上去年的每个月
        if len(str(last_year_month)) == 1:
            last_year_month = '0%s' % last_year_month
        MonthFirstDayAndLastDay = getMonthFirstDayAndLastDay(last_year, last_year_month)
        date_list = '%s-%s' % (last_year, last_year_month)
        # 通过函数append,得到去年的列表
        data_list_lasts.append({'date': date_list, 'content': MonthFirstDayAndLastDay})

    data_list_todays = list()
    # 通过for循环,得到今年的时间夹月份的列表
    # 先遍历今年每个月的列表
    for today_year_month in today_year_months:
        # 定义date_list 去年加上今年的每个月
        if len(str(today_year_month)) == 1:
            today_year_month = '0%s' % today_year_month
        MonthFirstDayAndLastDay = getMonthFirstDayAndLastDay(today_year, today_year_month)
        date_list = '%s-%s' % (today_year, today_year_month)
        # 通过函数append,得到今年的列表
        data_list_todays.append({'date': date_list, 'content': MonthFirstDayAndLastDay})
    # 去年的时间数据加上今年的时间数据得到年月时间列表
    data_year_month = data_list_lasts + data_list_todays
    return data_year_month


def get_mar12_year_month_day(num=12):
    date_list = list()
    i = 0
    while i < num:
        date_list.append({'date': get_day_delta(-i).strftime('%Y-%m-%d'), 'content': {
            'start_date': get_day_delta(-i).strftime('%Y-%m-%d') + ' 00:00:00',
            'end_date': get_day_delta(-i).strftime('%Y-%m-%d') + ' 23:59:00'}})
        i += 1
    return list(reversed(date_list))


def get_mar12_year(num=7):
    year = datetime.date.today().year
    year_dict = {'date': str(year), 'content': {"start_date": str(year) + '-01-01 00:00:00',
                                                "end_date": str(year) + '-12-31 23:59:59'}}
    date_list = [year_dict]
    i = 1
    while i < num:
        date_list.append(
            {'date': str(int(year) - i), 'content': {"start_date": str(int(year) - i) + '-01-01 00:00:00',
                                                     "end_date": str(int(year) - i) + '-12-31 23:59:59'}})
        i += 1
    return list(reversed(date_list))