def __get_week_number(self, target_date: datetime) -> int: """指定された日付からその月の「第N週」かを取得する Arguments: target_date {datetime} -- 第N週を取得する対象の日付情報 Returns: int -- 第N週の`N` #この__get_week_number()の使い方 #date = datetime(2019,6,3) #week_num = __get_week_number(date) """ # カレンダーを日曜日始まりで作成する( firstweekday=6 は日曜日始まりを指定 ) cl = Calendar(firstweekday=6) # ここからが実際に第N週かを取得する処理 month_cl = cl.monthdays2calendar(target_date.year, target_date.month) week_num = 1 for week in month_cl: for day in week: if day[0] == target_date.day: return week_num week_num += 1
def get_month(y, m): """ Return list of month's weeks, which day is a turple (<month day number>, <weekday number>) """ cal = Calendar() month = cal.monthdays2calendar(y, m) # Add additional num to every day which mark from # this or from other day that day numer for week in range(len(month)): for day in range(len(month[week])): _day = month[week][day] if _day[0] == 0: this = 0 else: this = 1 _day = (_day[0], _day[1], this) month[week][day] = _day # Days numbers of days from preious and next monthes # marked as 0 (zero), replace it with correct numbers # If month include 4 weeks it hasn't any zero if len(month) == 4: return month quater = calc_quarter(y, m) # Zeros in first week fcount = 0 for i in month[0]: if i[0] == 0: fcount += 1 # Zeros in last week lcount = 0 for i in month[-1]: if i[0] == 0: lcount += 1 if fcount: # Last day of prev month n = monthrange(quater[0][0], quater[0][1])[1] for i in range(fcount): month[0][i] = (n - (fcount - 1 - i), i, 0) if lcount: # First day of next month n = 1 for i in range(lcount): month[-1][-lcount + i] = (n + i, 7 - lcount + i, 0) return month
def find_mondays(year, month): cal = Calendar() mondays = list() for week in cal.monthdays2calendar(year, month): for day in week: (monthday, weekday) = day if (weekday == 1 and monthday > 0): mondays.append( datetime.date(year=year, month=month, day=monthday)) return mondays
def find_mondays(year, month): cal = Calendar() mondays = list() for week in cal.monthdays2calendar(year, month): for day in week: (monthday, weekday) = day if (weekday == 1 and monthday > 0): mondays.append(datetime.date(year=year, month=month, day=monthday)) return mondays
def calendar(tasks, date_obj=date.today()): month, year = date_obj.month, date_obj.year tasks = tasks dates = Calendar() weeks = [process_week(week, month, year) for week in dates.monthdays2calendar(year, month)] weeks = [check_tasks(week, tasks) for week in weeks] return { 'weeks': weeks, 'date_obj': date_obj, }
def get_month_wireframe(year, month, day): """ Utility function for getting the layout of month days """ year, month, day = int(year), int(month), int(day) cal = Calendar() monthly_days = cal.monthdays2calendar(year, month) return { 'monthly_days': monthly_days, 'year': year, 'month': MONTHS[month], 'today': day, }
def get_week_wireframe(year, month, day): """ Utility function for returning the current week """ year, month, day = int(year), int(month), int(day) cal = Calendar() monthly_days = cal.monthdays2calendar(year, month) current_week = None for week in monthly_days: if [i for i, v in enumerate(week) if v[0] == day]: current_week = week return { 'week': current_week, 'year': year, 'month': MONTHS[month], 'today': day, }
def change_day(self, year, month): """最初に各ラベルを初期化""" self.clr_btn_txt() cl = Calendar(firstweekday=6) # タプル(日付,曜日)が週毎に返される month_cl = cl.monthdays2calendar(year, month) i = 1 # "1"週目で初期化 j = 0 for week in month_cl: # weekは[1週目],[2週目],... for day in week: # dayは週毎の各日の(日付,曜日) if day[1] + 1 == 7: j = 0 else: j = day[1] + 1 if not day[0] == 0: self.set_btn_txt(i, j, str(day[0])) i += 1
def calendar_page(): calendar = Calendar() month = int(request.args.get("month")) year = int(request.args.get("year")) weeks = list(calendar.monthdays2calendar(year, month)) while len(weeks) < 6: weeks.append([(0, i) for i in range(7)]) data = {} data["weekdays"] = list(day_name) data["month"] = month data["month_name"] = month_name[month] data["year"] = str(year) return render_template("calendar.html", weeks=weeks, data=data)
def horas_semana(self, ano, mes, semana): total = timedelta(hours=0, minutes=0) calendario = Calendar() listasemana = calendario.monthdays2calendar(year=ano, month=mes) try: for dia in listasemana[semana]: if not dia[0] == 0: diatrabalhado = self.diatrabalho_set.filter(data=datetime(year=ano, month=mes, day=dia[0])) if diatrabalhado: diatrabalhado = diatrabalhado[0] total += diatrabalhado.horas_trabalhadas() return total except IndexError: return timedelta(hours=0, minutes=0)
def meetup_day(year, month, weekday, nth_day): cal = Calendar() # Get the calendar for given month and year weeks_and_days = cal.monthdays2calendar(year, month) # Day string (Monday) --> number weekday_num = week_day_to_num(weekday) # Week string to number nth_week = dict(zip('1st 2nd 3rd 4th last'.split(), range(5))) final_day = 0 if nth_day in nth_week: # Make the string an int week_num = nth_week[nth_day] # Check if there is a "Monday" on first week if weeks_and_days[0][weekday_num][0]: final_day = weeks_and_days[week_num][weekday_num][0] else: final_day = weeks_and_days[week_num + 1][weekday_num][0] elif nth_day == "teenth": # Check if in second week if weeks_and_days[1][weekday_num][0] >= 10: final_day = weeks_and_days[1][weekday_num][0] # Check if third week elif weeks_and_days[2][weekday_num][0] >= 10: final_day = weeks_and_days[2][weekday_num][0] else: final_day = weeks_and_days[3][weekday_num][0] return date(year, month, final_day)
def _get_month(current_year, current_month): """ Return list of month's weeks, which day is a turple (<month day number>, <weekday number>) """ cal = Calendar() month = cal.monthdays2calendar(current_year, current_month) # Append to month's days a bool value to know if the day is in month for week_number, week in enumerate(month): for day in week: in_this_month = 1 day_number, weekday_number = day if not day_number: in_this_month = 0 day = (day_number, weekday_number, in_this_month) month[week_number][weekday_number] = day if len(month) == 4: return month quarter = calc_quarter(current_year, current_month) # Zeros in first week first_week_zeros = 0 first_week = month[0] for day in first_week: in_this_month = day[-1] if not in_this_month: first_week_zeros += 1 # Zeros in last week last_week_zeros = 0 last_week = month[-1] for day in last_week: in_this_month = day[-1] if not in_this_month: last_week_zeros += 1 if first_week_zeros: # Last day of prev month previous_month = quarter[0] _, n_days = monthrange(*previous_month) for i in range(first_week_zeros): weekday = n_days - (first_week_zeros - 1 - i) month[0][i] = (weekday, i, 0) if last_week_zeros: for i in range(last_week_zeros): month[-1][-last_week_zeros + i] = ( i + 1, 7 - last_week_zeros + i, 0, ) return month