first push
This commit is contained in:
80
panel/convert_date.py
Normal file
80
panel/convert_date.py
Normal file
@@ -0,0 +1,80 @@
|
||||
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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user