81 lines
3.3 KiB
Python
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
|
|
|
|
|