import datetime import calendar from dateutil.relativedelta import relativedelta def time2date(input): chu_ky_thoi_gian = input['CHU KỲ THỜI GIAN'] thu = input['THỨ'] ngay = input['NGÀY'] tuan = input['TUẦN'] thang = input['THÁNG'] quy = input['QUÝ'] nam = input['NĂM'] current_date = datetime.date.today() output = 'error' if chu_ky_thoi_gian=='ngày': # hôm kia if ngay=='hôm kia': output = current_date - datetime.timedelta(days=2) # hôm qua elif ngay=='hôm qua': output = current_date - datetime.timedelta(days=1) # hôm nay elif ngay=='hôm nay': output = current_date # ngày mai elif ngay=='mai': output = current_date + datetime.timedelta(days=1) # ngày kia elif ngay=='kia': output = current_date + datetime.timedelta(days=2) # đầu elif ngay=='đầu': if thang=='trước': needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, 1 ) elif thang=='này': needed_thang = current_date.month needed_nam = current_date.year output = datetime.date( needed_nam, needed_thang, 1 ) elif thang=='sau': needed_thang = 1 if current_date.month==12 else current_date.month+1 needed_nam = current_date.year+1 if current_date.month==12 else current_date.year output = datetime.date( needed_nam, needed_thang, 1 ) else: print('ngày đầu') output = current_date # cuối elif ngay=='cuối': if thang=='trước': needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang=='này': needed_thang = current_date.month needed_nam = current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang=='sau': needed_thang = 1 if current_date.month==12 else current_date.month+1 needed_nam = current_date.year+1 if current_date.month==12 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) else: print('ngày cuối') output = current_date # xxx elif ngay.isdigit(): ngay = int(ngay) if thang.isdigit(): thang = int(thang) if nam.isdigit(): nam = int(nam) try: output = datetime.date(nam, thang, ngay) except ValueError: print("ngày xxx tháng yyy nam xxx") output = current_date else: try: output = datetime.date(current_date.year, thang, ngay) except ValueError: print("ngày xxx tháng yyy nam xxx") output = current_date else: try: output = datetime.date(current_date.year, current_date.month, ngay) except ValueError: print('ngày xxx') output = current_date elif ngay=='khác': # thứ hai tuần sau # thứ hai tuần này # thứ hai tuần trước # thứ hai tuần gần nhất # thứ hai if thu != "khác": if tuan=='khác' or tuan=='gần nhất': current_thu = current_date.weekday()+2 input_thu = 8 if thu=='chủ nhật' else int(thu) if input_thu < current_thu: daydelta = current_thu - input_thu output = current_date - datetime.timedelta(days=daydelta) elif input_thu == current_thu: output = current_date - datetime.timedelta(days=7) else: daydelta = input_thu - current_thu output = current_date - datetime.timedelta(days=7-daydelta) elif tuan=='này': current_thu = current_date.weekday()+2 input_thu = 8 if thu=='chủ nhật' else int(thu) if input_thu < current_thu: daydelta = current_thu - input_thu output = current_date - datetime.timedelta(days=daydelta) elif input_thu == current_thu: output = current_date else: daydelta = input_thu - current_thu output = current_date + datetime.timedelta(days=daydelta) elif tuan=='trước': current_thu = current_date.weekday()+2 input_thu = 8 if thu=='chủ nhật' else int(thu) if input_thu < current_thu: daydelta = current_thu - input_thu + 7 output = current_date - datetime.timedelta(days=daydelta) elif input_thu == current_thu: output = current_date - datetime.timedelta(days=7) else: daydelta = input_thu - current_thu output = current_date - datetime.timedelta(days=7-daydelta) elif tuan=='sau': current_thu = current_date.weekday()+2 input_thu = 8 if thu=='chủ nhật' else int(thu) if input_thu < current_thu: daydelta = 7 - (current_thu - input_thu) output = current_date + datetime.timedelta(days=daydelta) elif input_thu == current_thu: output = current_date + datetime.timedelta(days=7) else: daydelta = input_thu - current_thu output = current_date + datetime.timedelta(days=7+daydelta) elif thu=='khác': current_thu = current_date.weekday() if tuan=='trước' or tuan=='gần nhất': # ngày cuối tuần daydelta = current_thu+1 output = current_date - datetime.timedelta(days=daydelta) elif tuan=='này': daydelta = 6 - current_thu if daydelta > 0: output = current_date + datetime.timedelta(days=daydelta) else: output = current_date elif tuan=='sau': daydelta = 13 - current_thu output = current_date + datetime.timedelta(days=daydelta) else: print('ngày khác thứ khác tuần khác') output = current_date else: # return default for ngay output = current_date print('Error chu ky thoi gian: ngay') elif chu_ky_thoi_gian=='tháng': # ngày cuối tháng if thu != 'khác' or ngay != 'khác' or tuan != 'khác': print('Invalid') needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang=='trước': needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang=='này': needed_thang = current_date.month needed_nam = current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang=='sau': needed_thang = 1 if current_date.month==12 else current_date.month+1 needed_nam = current_date.year+1 if current_date.month==12 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) elif thang.isdigit(): thang = int(thang) if nam.isdigit(): nam = int(nam) output = datetime.date( int(nam), int(thang), calendar.monthrange(int(nam), int(thang))[1] ) else: if thang > current_date.month: output = datetime.date( current_date.year-1, thang, calendar.monthrange(current_date.year-1, thang)[1] ) else: output = datetime.date( current_date.year, thang, calendar.monthrange(current_date.year, thang)[1] ) elif thang=='khác': needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) else: # ngay cuoi thang truoc needed_thang = 12 if current_date.month==1 else current_date.month-1 needed_nam = current_date.year-1 if current_date.month==1 else current_date.year output = datetime.date( needed_nam, needed_thang, calendar.monthrange(needed_nam, needed_thang)[1] ) print('Error chu ky thoi gian: thang') elif chu_ky_thoi_gian=='quý': if quy in ['1', '2', '3', '4', 'I', 'II', 'III', 'IV']: output = "Valid" output = current_date # print('Chu ky thoi gian: quy ' + quy) else: output = "Invalid" output = current_date # print('Error chu ky thoi gian: quy') elif chu_ky_thoi_gian=='năm': if nam.isdigit(): output = "Valid" output = current_date # print("Chu ky thoi gian: nam " + nam) else: output = "Invalid" output = current_date # print('Error chu ky thoi gian: năm') elif chu_ky_thoi_gian=='khác': output = "Valid" output = current_date else: output = current_date return output