سلام
دوست عزیز من دو تا تابع بهتون می دم که نه فقط این کار بلکه خیلی کار ها می تونید انجام بدید:
من همون مثال خودتون رو نوشتم
البته باید یادتون باشه که تاریخ رو باید کامل وارد کنید یعنی 10 رقمی مثل 20/02/1391
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim Date1 = CDate(GregorianDate(TextBox1.Text)) '1391/02/20
Dim Date2 = CDate(GregorianDate(TextBox2.Text)) '1391/03/25
Dim DayDif = Date1.Subtract(Date2).Days
MsgBox(DayDif)
End Sub
''' <summary>
''' برگردان تاریخ میلادی به شمسی
''' </summary>
''' <param name="InDate">تاریخ میلادی</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function PersianDate(Optional InDate As Date = Nothing) As String
Try
If InDate.Year <= 1 Then InDate = Now
Dim PClndr As New Globalization.PersianCalendar
Dim DateInIran As String = PClndr.GetYear(InDate)
DateInIran &= "/" & Strings.Right(("0" & PClndr.GetMonth(InDate)), 2)
DateInIran &= "/" & Strings.Right(("0" & PClndr.GetDayOfMonth(InDate)), 2)
Return DateInIran
Catch ex As Exception
Return ""
End Try
End Function
''' <summary>
''' برگردان تاریخ شمسی به میلادی
''' </summary>
''' <param name="InDate">تاریخ شمسی</param>
''' <returns></returns>
''' <remarks></remarks>
Private Function GregorianDate(InDate As String) As String
If InDate.Length <> 10 Then Return ""
Dim Year As Integer = Mid(InDate, 1, 4)
If Year < 1300 OrElse Mid(InDate, 1, 4) > 1500 Then Return ""
Dim Month As Integer = Mid(InDate, 6, 2)
If Not IsNumeric(Month) OrElse Month > 12 OrElse Month < 1 Then Return ""
Dim Day As Integer = Mid(InDate, 9, 2)
If Day < 1 OrElse Day > 31 Then Return ""
Try
Dim PClndr As New Globalization.PersianCalendar
Return PClndr.ToDateTime(Year, Month, Day, 0, 0, 0, 0).ToString
Catch ex As Exception
Return ""
End Try
End Function
در ضمن من همین توابع رو با چند تا تابع مفید تو این تاپیک گذاشتم:
https://barnamenevis.org/showthread.p...=1#post1472084