|
|
@ -0,0 +1,213 @@ |
|
|
|
using System; |
|
|
|
using System.Globalization; |
|
|
|
|
|
|
|
namespace Sevomin.Models.Helpers |
|
|
|
{ |
|
|
|
public class DateAssist |
|
|
|
{ |
|
|
|
public class FromToDate |
|
|
|
{ |
|
|
|
public DateTime Start; |
|
|
|
public DateTime End; |
|
|
|
public string startShamsi; |
|
|
|
public string endShamsi; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// None Zero-Based month number
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="monthNumber"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
public static string GetPersianMonthName(int monthNumber) |
|
|
|
{ |
|
|
|
switch (monthNumber) |
|
|
|
{ |
|
|
|
case 1: |
|
|
|
return "فروردین"; |
|
|
|
case 2: |
|
|
|
return "اردیبهشت"; |
|
|
|
case 3: |
|
|
|
return "خرداد"; |
|
|
|
case 4: |
|
|
|
return "تیر"; |
|
|
|
case 5: |
|
|
|
return "مرداد"; |
|
|
|
case 6: |
|
|
|
return "شهریور"; |
|
|
|
case 7: |
|
|
|
return "مهر"; |
|
|
|
case 8: |
|
|
|
return "آبان"; |
|
|
|
case 9: |
|
|
|
return "آذر"; |
|
|
|
case 10: |
|
|
|
return "دی"; |
|
|
|
case 11: |
|
|
|
return "بهمن"; |
|
|
|
case 12: |
|
|
|
return "اسفند"; |
|
|
|
default: |
|
|
|
throw new ArgumentException("شماره ماه باید بین 1 تا 12 باشد.", "monthNumber", null); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static string GetFullPersianDate(DateTime value) |
|
|
|
{ |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
return string.Format("{0} {1} {2}", |
|
|
|
pc.GetDayOfMonth(value), GetPersianMonthName(pc.GetMonth(value)), |
|
|
|
pc.GetYear(value)); |
|
|
|
} |
|
|
|
|
|
|
|
public static DateTime? ValidateAndSetToMiladi(string value, DateTime? defaultValue = null) |
|
|
|
{ |
|
|
|
string vd = ValidateDate(value); |
|
|
|
if (string.IsNullOrEmpty(vd)) |
|
|
|
return defaultValue; |
|
|
|
return ToMiladi(vd); |
|
|
|
} |
|
|
|
|
|
|
|
public static DateTime ToMiladi(string value) |
|
|
|
{ |
|
|
|
if (value == "" || value == null) |
|
|
|
return DateTime.MinValue; |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
DateTime mil; |
|
|
|
mil = pc.ToDateTime(int.Parse(value.Substring(0, 4)), |
|
|
|
int.Parse(value.Substring(5, 2)), int.Parse(value.Substring(8, 2)) |
|
|
|
, 0, 0, 0, 0); |
|
|
|
return mil; |
|
|
|
} |
|
|
|
|
|
|
|
public static string ToShamsi(DateTime value) |
|
|
|
{ |
|
|
|
if (value == DateTime.MinValue) |
|
|
|
return string.Empty; |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
return string.Format("{0:0000}/{1:00}/{2:00}", |
|
|
|
pc.GetYear(value), pc.GetMonth(value), |
|
|
|
pc.GetDayOfMonth(value)); |
|
|
|
} |
|
|
|
|
|
|
|
public static string ValidateDate(string value) |
|
|
|
{ |
|
|
|
if (value == null) |
|
|
|
return ""; |
|
|
|
int offset = 0; |
|
|
|
if (value.Length == 8) //13801010
|
|
|
|
{ |
|
|
|
value = value.Insert(4, "/"); |
|
|
|
value = value.Insert(7, "/"); |
|
|
|
} |
|
|
|
if (int.TryParse(value, out offset)) |
|
|
|
{ |
|
|
|
if (offset > 500 || offset < -500) |
|
|
|
return ""; |
|
|
|
return ToShamsi(DateTime.Today.AddDays(offset)); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
DateTime val = ToMiladi(value); |
|
|
|
if (val < DateTime.Today.AddYears(-5) || |
|
|
|
val > DateTime.Today.AddYears(10)) |
|
|
|
return ""; |
|
|
|
return value; |
|
|
|
} |
|
|
|
catch (Exception) |
|
|
|
{ |
|
|
|
return ""; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
public static FromToDate GetThisMonth() |
|
|
|
{ |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
DateTime value = DateTime.Today; |
|
|
|
return GetMonth(pc.GetMonth(value)); |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// returns date of 1st and last day of month as a
|
|
|
|
/// FromToDate object
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="monthIndex">Index of Mounth 1-based</param>
|
|
|
|
/// <returns>FromToDate object</returns>
|
|
|
|
public static FromToDate GetMonth(int monthIndex) |
|
|
|
{ |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
FromToDate ftd = new FromToDate(); |
|
|
|
DateTime value = DateTime.Today; |
|
|
|
string startShamsi = string.Format("{0:0000}/{1:00}/{2:00}", |
|
|
|
pc.GetYear(value), monthIndex, |
|
|
|
1); |
|
|
|
string endShamsi = string.Format("{0:0000}/{1:00}/{2:00}", |
|
|
|
pc.GetYear(value), monthIndex, |
|
|
|
pc.GetDaysInMonth(pc.GetYear(value), monthIndex)); |
|
|
|
ftd.Start = ToMiladi(startShamsi); |
|
|
|
ftd.End = ToMiladi(endShamsi); |
|
|
|
ftd.startShamsi = startShamsi; |
|
|
|
ftd.endShamsi = endShamsi; |
|
|
|
return ftd; |
|
|
|
} |
|
|
|
|
|
|
|
public static String NextMonth(string currentDate, int dayOfMonth) |
|
|
|
{ |
|
|
|
return NextMonth(currentDate, dayOfMonth, 1); |
|
|
|
} |
|
|
|
public static String NextMonth(string currentDate, int dayOfMonth, int monthInterval) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
int year = int.Parse(currentDate.Substring(0, 4)); |
|
|
|
int month = int.Parse(currentDate.Substring(5, 2)); |
|
|
|
month += monthInterval; |
|
|
|
if (month > 12) |
|
|
|
{ |
|
|
|
year += 1; |
|
|
|
month = 1; |
|
|
|
} |
|
|
|
if (pc.GetDaysInMonth(year, month) < dayOfMonth) |
|
|
|
dayOfMonth = pc.GetDaysInMonth(year, month); |
|
|
|
return string.Format("{0:0000}/{1:00}/{2:00}", year, month, dayOfMonth); |
|
|
|
|
|
|
|
} |
|
|
|
catch (Exception) |
|
|
|
{ |
|
|
|
return ""; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
public static string ToPersianNumbers(string number) |
|
|
|
{ |
|
|
|
char[] temp = new char[number.Length]; |
|
|
|
|
|
|
|
for (int i = 0; i < number.Length; i++) |
|
|
|
{ |
|
|
|
char value = number[i]; |
|
|
|
|
|
|
|
if (value >= 48 && value <= 57) |
|
|
|
temp[i] = (char)(value + 1728); |
|
|
|
else |
|
|
|
temp[i] = value; |
|
|
|
} |
|
|
|
|
|
|
|
return new String(temp); |
|
|
|
} |
|
|
|
|
|
|
|
public static int GetJalaliWeekNumber(DateTime gregorianDate) |
|
|
|
{ |
|
|
|
PersianCalendar pc = new PersianCalendar(); |
|
|
|
|
|
|
|
DateTime gregYearStart = pc.ToDateTime(pc.GetYear(gregorianDate), 1, 1, 0, 0, 0, 0); |
|
|
|
int diff = (gregorianDate - gregYearStart).Days; |
|
|
|
int wd = ((int)pc.GetDayOfWeek(gregorianDate) + 2) % 7; |
|
|
|
|
|
|
|
return (diff - wd + 10) / 7; |
|
|
|
} |
|
|
|
} |
|
|
|
} |