Нужна ф-ция для счёта даты и время. Пример CyRax'a некатит, он считает только дату назад, а мне надо и вперёд, и вроде глюки там есть. Можно конечно самому написать, но там много всего учитывать (сколько дней в месяце, высокосный год итп...) Может кто-то уже занимался таким?
Sorry
---
Я написал только как считатать дату, а время вот так:
---
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
блин, наверно криво высказался. Нужна функция для счёта даты в двух направлениях, назад и вперед, в учётом всех прибамбасов (год высокосный, кол- дней в месяце итп...) У кого такая есть? По поводу DateAdd и DateDiff - ацтой, нечего не получается с ней.
Это вроде CyRax'a, чуть переделана мной, сам принцип не менялся, вообщем
Public Function CalcAge(Years, Month, Days) As String
On Error GoTo ErrInWork
z = Date
z4 = DateSerial(Years, Month, Days)
z5 = DateSerial(DatePart("YYYY", z), Month, Days)
z6 = DateSerial(DatePart("YYYY", z), DatePart("m", z), Days)
MyYea = DateDiff("yyyy", z4, z)
MyMon = DateDiff("m", z, z5)
If MyMon < 0 Then MyYea = MyYea - 1: MyMon = 12 + MyMon
MyDay = DateDiff("d", z6, z)
If MyDay < 0 Then
MyMon = MyMon - 1
For DiCM = 32 To 28 Step -1
z7 = DateSerial(DatePart("YYYY", z), DatePart("m", z), DiCM)
If DatePart("d", z7) = DiCM Then Exit For
Next DiCM
MyDay = DiCM + MyDay
End If
CalcAge = MyDay & "." & MyMon & "." & MyYea
Exit Function
ErrInWork:
MsgBox "Произошла ошибка во время расчёта:" & Chr(13) & Error, 16, Err: Resume ErrInWork2
ErrInWork2:
End Function
нехрена не работает, считает фигю какую то, далее DateDiff...
y = DateDiff("yyyy", Date, "21.07.2006"
m = DateDiff("m", Date, "21.07.2006"
d = DateDiff("d", Date, "21.07.2006"
Тестировалось 21-ого числа, возвращает:
y = 1
m = 12
d = 365
Нах он такое возвращает? Нужно y=1; m = 0; d = (не считал, но тоже ~0)
Label1.Text = Today, это тоже самое как Label1.Text = Now.Tostring("d.M.yyyy", просто я написал более "простой" код.
Учим матчасть.
Свойство Microsoft.VisualBasic.DateAndTime.Today
Имеет тип DateTime (стандартный тип для хранения даты/времени).
Возвращает текущую дату, при этом время устанавливается равным полуночи (00:00:00).
Свойство Microsoft.VisualBasic.DateAndTime.TimeOfDay.
Тип аналогичный - DateTime.
Возвращает текущее время, при этом дата устанавливается в 1.01.0001.
И лично для меня пока остается загадкой, почему при присвоении такого свойства строковой переменное получается 22:14:24, а не 01.01.0001 22:14:24.
Оба эти свойства оставлены исключительно для обратной совместимости (ДА, СОВМЕСТИМОСТИ!) с программами, написанными на VB6. То есть, для того, чтоб можно было скопировать код, написанный на VB6, вставить в код .NET-программы и не переписывать код для работы с типом DateTime.
В то время, если имеется некая функция, оставленная для совместимости и CLS-совместимый аналог, то рекомендуется использовать именно CLS-аналог - для той же СОВМЕСТИМОСТИ.
Далее - если ты помнишь, ToDay имеет тип DateTime, ты же его НЕЯВНО приводишь к String.
Включи жесткую проверку типов и увидишь, где у тебя ошибки - при приведении типа DateTime к типу String.
Вобщем, твой код может быть проще и короче, но он принципиально неверен.
Function date_difference_to_string(first_date As Date, second_date As Date) As String
Dim AD As Date
Dim new_date As Date
d = DateDiff("d", first_date, second_date)
If d < 0 Then
AD = first_date
first_date = second_date
second_date = AD
d = DateDiff("d", first_date, second_date)
End If
y = DateDiff("yyyy", first_date, second_date)
m = DateDiff("m", first_date, second_date)
y = y - 1
If y = -1 Then y = 0
m = m - 1
If m = -1 Then m = 0
m = m Mod 12
AD = y * 12 + m
new_date = DateAdd("m", AD, first_date)
d = DateDiff("d", new_date, second_date)
date_difference_to_string = "Ðàçíèöà äàò: " & y & " ëåò, " & m & " ìåñÿöåâ, " & d & " äíåé."
Debug.Print y
Debug.Print m
Debug.Print d
End Function
Private Sub Form_Load()
Debug.Print date_difference_to_string(Date, "21.07.2018"
End Sub
Задолбали эти раскладки !
Блин, хоть бы какую правку придумали, чтобы исправить можно было
Function date_difference_to_string(first_date As Date, second_date As Date) As String
 im AD As Date
 im new_date As Date
d = DateDiff("d", first_date, second_date)
If d < 0 Then
AD = first_date
first_date = second_date
second_date = AD
d = DateDiff("d", first_date, second_date)
End If
y = DateDiff("yyyy", first_date, second_date)
m = DateDiff("m", first_date, second_date)
y = y - 1
If y = -1 Then y = 0
m = m - 1
If m = -1 Then m = 0
m = m Mod 12
AD = y * 12 + m
new_date = DateAdd("m", AD, first_date)
d = DateDiff("d", new_date, second_date)
date_difference_to_string = "Разница дат: " & y & " лет, " & m & " месяцев, " & d & " дней."
 ebug.Print y
 ebug.Print m
 ebug.Print d
End Function
Private Sub Form_Load()
 ebug.Print date_difference_to_string(Date, "21.07.2018"
End Sub