Files
Rasadyar_Hamedan/panel/convert_date.py
2026-01-18 11:42:00 +03:30

81 lines
3.3 KiB
Python

import datetime
import jdatetime
def convert_to_shamsi(year=None, month=None, day=None,datetime=None,date=None,in_value=None):
if datetime is not None:
date = jdatetime.datetime.fromgregorian(year=year, month=month, day=day,datetime=datetime).strftime("%Y-%m-%d (%H:%M)")
if in_value and date is not None:
if "(" in date: # اگر زمان وجود دارد
date_part, time_part = date.split(" (")
parts = date_part.split("-")
reversed_date = "-".join(reversed(parts))
date = f"{reversed_date} ({time_part}"
else:
parts = date.split("-")
reversed_date = "-".join(reversed(parts))
date = reversed_date
elif date:
date = jdatetime.datetime.fromgregorian(date=date).strftime(
"%Y-%m-%d")
else:
date = jdatetime.datetime.fromgregorian(year=int(year), month=int(month), day=int(day), datetime=datetime).strftime(
"%Y-%m-%d")
return date
def convert_to_miladi(year=None, month=None, day=None):
date = jdatetime.datetime(year, month, day).togregorian()
return date
def get_month_start_end_dates(period_type):
today = jdatetime.date.today()
day_of_month = today.day
# Function to convert Jalali date to Gregorian date
def to_gregorian(jalali_date):
return jalali_date.togregorian()
# Function to get start and end dates for a given Jalali month
def get_start_end_of_month(jalali_date):
start_of_month = jdatetime.date(jalali_date.year, jalali_date.month, 1)
# Calculate the end of the month
if jalali_date.month == 12:
end_of_month = jdatetime.date(jalali_date.year + 1, 1, 1) - jdatetime.timedelta(days=1)
else:
end_of_month = jdatetime.date(jalali_date.year, jalali_date.month + 1, 1) - jdatetime.timedelta(days=1)
return to_gregorian(start_of_month), to_gregorian(end_of_month)
# Helper function to get the previous month in Jalali calendar
def get_previous_month(jalali_date):
if jalali_date.month == 1:
return jdatetime.date(jalali_date.year - 1, 12, jalali_date.day)
else:
return jdatetime.date(jalali_date.year, jalali_date.month - 1, jalali_date.day)
# Determine the months to consider based on the period type and current day
months_to_consider = 1 if period_type == 'oneMonth' else 3 if period_type == 'threeMonths' else 6 if period_type == 'sixMonths' else 12
# List to hold the start and end dates
start_end_dates = []
if day_of_month >= 30:
# Include the current month if today is the 30th or 31st
for _ in range(months_to_consider):
start, end = get_start_end_of_month(today)
start_end_dates.append({"start_date": start, "end_date": end})
today = get_previous_month(today)
else:
# Exclude the current month if today is less than the 30th
today = get_previous_month(today)
for _ in range(months_to_consider):
start, end = get_start_end_of_month(today)
start_end_dates.append({"start_date": start, "end_date": end})
today = get_previous_month(today)
return start_end_dates[::-1] # Reverse to get chronological order