|
|
- 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;
- }
- }
- }
|