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; } /// /// None Zero-Based month number /// /// /// 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)); } /// /// returns date of 1st and last day of month as a /// FromToDate object /// /// Index of Mounth 1-based /// FromToDate object 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; } } }