Files
Backend-Api/_0_Framework/Application/Tools.cs
2024-07-09 19:06:41 +03:30

334 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using PersianTools.Core;
using System;
using System.Collections.Generic;
using System.Globalization;
namespace _0_Framework_b.Application
{
public static class Tools
{
public static string[] MonthNames =
{"فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "شهریور", "مهر", "آبان", "آذر", "دی", "بهمن", "اسفند"};
public static string[] DayNames = {"شنبه", "یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه"};
public static string[] DayNamesG = {"یکشنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه"};
public static string ToFarsi(this DateTime? date)
{
try
{
if (date != null) return date.Value.ToFarsi();
}
catch (Exception)
{
return "";
}
return "";
}
public static string ToFarsi(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetYear(date)}/{pc.GetMonth(date):00}/{pc.GetDayOfMonth(date):00}";
}
public static string ToFarsiMonth(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetMonth(date)}";
}
public static string ToFarsiYear2(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
var year = pc.GetYear(date).ToString();
string y1 = string.Empty;
string y2 = string.Empty;
string sum=string.Empty;
for (int i = 0; i < year.Length; i++)
{
if (year[i] == 2)
{
y1 += year[i];
}
if (year[i]==3)
{
y2 += year[i];
}
}
sum = y1 + y2;
return sum;
}
public static string ToFarsiYear(this DateTime date)
{
if (date == new DateTime()) return "";
var pc = new PersianCalendar();
return $"{pc.GetYear(date)}";
}
public static string ToDiscountFormat(this DateTime date)
{
if (date == new DateTime()) return "";
return $"{date.Year}/{date.Month}/{date.Day}";
}
public static string GetTime(this DateTime date)
{
return $"_{date.Hour:00}_{date.Minute:00}_{date.Second:00}";
}
public static string ToFarsiFull(this DateTime date)
{
var pc = new PersianCalendar();
return
$"{pc.GetYear(date)}/{pc.GetMonth(date):00}/{pc.GetDayOfMonth(date):00} {date.Hour:00}:{date.Minute:00}:{date.Second:00}";
}
private static readonly string[] Pn = {"۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"};
private static readonly string[] En = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
public static string ToEnglishNumber(this string strNum)
{
var cash = strNum;
for (var i = 0; i < 10; i++)
cash = cash.Replace(Pn[i], En[i]);
return cash;
}
public static string ToPersianNumber(this int intNum)
{
var chash = intNum.ToString();
for (var i = 0; i < 10; i++)
chash = chash.Replace(En[i], Pn[i]);
return chash;
}
public static DateTime? FromFarsiDate(this string InDate)
{
if (string.IsNullOrEmpty(InDate))
return null;
var spited = InDate.Split('/');
if (spited.Length < 3)
return null;
if (!int.TryParse(spited[0].ToEnglishNumber(), out var year))
return null;
if (!int.TryParse(spited[1].ToEnglishNumber(), out var month))
return null;
if (!int.TryParse(spited[2].ToEnglishNumber(), out var day))
return null;
var c = new PersianCalendar();
return c.ToDateTime(year, month, day, 0, 0, 0, 0);
}
public static DateTime ToGeorgianDateTime(this string persianDate)
{
persianDate = persianDate.ToEnglishNumber();
try
{
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = Convert.ToInt32(persianDate.Substring(5, 2));
var day = Convert.ToInt32(persianDate.Substring(8, 2));
return new DateTime(year, month, day, new PersianCalendar());
}
catch (Exception e)
{
return new DateTime(3000, 12, 20, new PersianCalendar());
}
}
public static DateTime ToGeorgian(this string persianDate)
{
persianDate = persianDate.ToEnglishNumber();
var year = Convert.ToInt32(persianDate.Substring(0, 4));
var month = 01;
var day = 01;
return new DateTime(year, month, day, new PersianCalendar());
}
public static string ToMoney(this double myMoney)
{
return myMoney.ToString("N0", CultureInfo.CreateSpecificCulture("fa-ir"));
}
public static string ToDoubleMoney(this string myMoney)
{
string bb = string.Empty;
for (int x = 0; x < myMoney.Length; x++)
{
if (char.IsDigit(myMoney[x]))
bb += myMoney[x];
}
if (bb.Length > 0)
{
return bb;
}
else
{
return "0";
}
}
public static string ToFileName(this DateTime date)
{
return $"{date.Year:0000}-{date.Month:00}-{date.Day:00}-{date.Hour:00}-{date.Minute:00}-{date.Second:00}";
}
public static string FindeEndOfMonth(this string date)
{
string y2 = string.Empty;
var year = Convert.ToInt32(date.Substring(0, 4));
var month = Convert.ToInt32(date.Substring(5, 2));
var YearD = date.Substring(0, 4);
var MonthD = date.Substring(5, 2);
if (month <= 6)
{
y2 = $"{YearD}/{MonthD}/31";
}
else if (month > 6 && month < 12)
{
y2 = $"{YearD}/{MonthD}/30";
}
else if (month == 12)
{
switch (year)
{
case 1346:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1350:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1354:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1358:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1362:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1366:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1370:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1375:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1379:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1383:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1387:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1391:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1395:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1399:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1403:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1408:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1412:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1416:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1420:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1424:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1428:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1432:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1436:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1441:
y2 = $"{YearD}/{MonthD}/30";
break;
case 1445:
y2 = $"{YearD}/{MonthD}/30";
break;
default:
y2 = $"{YearD}/{MonthD}/29";
break;
}
}
return y2;
}
public static int GetWorkingDaysDifference(DateTime? fromDate, DateTime? toDate)
{
//var workingDays = PersianDateExtensions.GetWorkingDays(new PersianDateTime(fromDate.ToFarsi()), new PersianDateTime(toDate.ToFarsi()), true);
var workingDays = PersianDateExtensions.GetWorkingDays((DateTime)fromDate, (DateTime)toDate, true);
if (fromDate > toDate)
workingDays *= -1;
return workingDays;
}
public static List<string> GetDaysBetweenDateGeorgian(DateTime startDate, DateTime? endDate)
{
var days = new List<string>();
if (endDate == null)
endDate = DateTime.Now;
var persianStartDate = new MD.PersianDateTime.Standard.PersianDateTime(startDate);
var persianEndDate = new MD.PersianDateTime.Standard.PersianDateTime(endDate);
while (persianEndDate - persianStartDate >= TimeSpan.FromDays(0))
{
days.Add(persianStartDate.ToShortDateString());
persianStartDate = persianStartDate.AddDays(1);
}
return days;
}
}
}