Страница: 1 | 2 | 3 | 4 | 5 |
Вопрос: Как считать дату?
Добавлено: 21.07.05 16:39
Автор вопроса: HACKER
Ответы
Всего ответов: 63
Номер ответа: 16
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #16
Добавлено: 22.07.05 12:04
Мож я че-то не понял, но у меня считает нормально в обе стороны
Dim dDay As Date
dDay = DateDiff("d", Now, "15.05.2006", vbMonday, vbUseSystem)
MsgBox DateSerial(Year(Date), Month(Date), Day(Date) + dDay)
dDay = DateDiff("d", Now, "7.03.2002", vbMonday, vbUseSystem)
MsgBox DateSerial(Year(Date), Month(Date), Day(Date) + dDay)
Номер ответа: 17
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #17
Добавлено: 22.07.05 16:06
ну как же правельно!
dDay = "23.10.1900"
Номер ответа: 18
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #18
Добавлено: 22.07.05 16:15
Блин, да не смотри ты на dDay, я его как Date определил просто для наглядности, на самом деле нужно было определить как Long - это разница между этими двумя датами в днях.
Я же написал
Dim dDay As Date
Private Sub Form_Load()
dDay = DateDiff("d", Now, "15.05.2006", vbMonday, vbUseSystem)
dDay = DateSerial(Year(Date), Month(Date), Day(Date) + dDay)
MsgBox dDay
End Sub
dDay=15.05.2006
Номер ответа: 19
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #19
Добавлено: 22.07.05 16:16
Определи dDay как Long, только тогда DateSerial присваивай другой переменной или выводи сразу в месседжбокс - и все будет корректно!
Номер ответа: 20
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #20
Добавлено: 22.07.05 16:22
и?
Dim dDay As Long
Dim dMonth As Long
Dim dYear As Long
dDay = DateDiff("d", Now, "23.07.2006", vbMonday, vbUseSystem)
dMonth = DateDiff("m", Now, "23.07.2006", vbMonday, vbUseSystem)
dYear = DateDiff("yyyy", Now, "23.07.2006", vbMonday, vbUseSystem)
MsgBox dDay & "." & dMonth & "." & dYear
Номер ответа: 21
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #21
Добавлено: 22.07.05 16:33
Ты сам то понял что написал? Че ты получить то хочешь? Разница дат - не дата, а число!
Блин, приколист...
P.S. dDay, dMonth и dYaer у тебя указывают на одно и тоже, только в разных масштабах (разница в днях, месяцах и годах). Бредово их объединять.
Скажи лучше чего ты хочешь получить.
Номер ответа: 22
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #22
Добавлено: 22.07.05 16:38
Теперь уж совсем долно быть понятно
Dim dDay As Long
Dim tmpDate As Date
dDay = DateDiff("d", Now, "23.07.2006", vbMonday, vbUseSystem)
tmpDate = DateSerial(0, 0, dDay)
MsgBox "Date diffirence is " & Year(tmpDate) - 2000 & " years " _
& Month(tmpDate) & " months " & Day(tmpDate) & " days"
Номер ответа: 23
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #23
Добавлено: 22.07.05 17:01
LamerOnLine
Попробуй сравнить сегодняшнюю дату и например "21.09.2004".
У тебя получится -1 лет 1 месяц 30 дней.
Хотя должно быть 0 лет 10 месяцев 1 дней.
Нужно не по отдельности разница в годах, месяцах и днях, объединенная механически в строку.
Нужно количество полных лет + количество полных месяцев + количество дней между двумя датами.
Номер ответа: 24
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #24
Добавлено: 22.07.05 17:10
Вообще то у меня выходит 9 месяцев 29 дней. Ты уверен в цифрах?
Dim dDay As Long
Dim dDate As Date
Dim tmpDate As Date
dDate = "21.09.2004"
dDay = DateDiff("d", Date, dDate, vbMonday, vbUseSystem)
If Date <> dDate Then
tmpDate = DateSerial(0, 0, Abs(dDay))
MsgBox "Date diffirence is " & Year(tmpDate) - 2000 & " years " _
& Month(tmpDate) & " months " & Day(tmpDate) & " days"
Else: MsgBox "0"
End If
Номер ответа: 25
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #25
Добавлено: 22.07.05 17:15
Нужно не по отдельности разница в годах, месяцах и днях, объединенная механически в строку.
Кстати, где ты такую глупость у меня видел?
Номер ответа: 26
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #26
Добавлено: 22.07.05 17:22
А вообще лучше не использовать DateSerial для таких целей - уж дюжа она глюкаво с нулями работает. Проще, имхо, самому распарсить количество дней на месяцы и годы. Это проблемно что ли?
Номер ответа: 27
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #27
Добавлено: 22.07.05 17:29
Да, и на худой конец
tmpDate = DateSerial(0, [B]1[/B], Abs(dDay))
MsgBox "Date diffirence is " & Year(tmpDate) - 2000 & " years " _
& Month(tmpDate)[B] - 1[/B] & " months " & Day(tmpDate) & " days"
Это должно решить проблему "нулевого месяца"
Номер ответа: 28
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #28
Добавлено: 22.07.05 17:29
во блин, тэги глюканули. Но смысл, думаю, понятен
Номер ответа: 29
Автор ответа:
HOOLIGAN
Вопросов: 0
Ответов: 1066
Профиль | | #29
Добавлено: 22.07.05 17:30
Вообще то у меня выходит 9 месяцев 29 дней. Ты уверен в цифрах?
Уверен.
Неправильно у тебя выходит. Должно быть 0 лет 10 месяцев 1 дней
От даты "21.09.2004" до "21.07.2005" (до вчера) - ровно 10 месяцев. И плюс 1 день со вчерашгего числа до сегодняшнего.
Чтобы убедиться, сделай
DateDiff("m", "21.09.2004", "22.07.2005"
Так что твой код не работает.
А распарсить несложно, просто длинно получится, нужно будет учитывать по отдельности количество дней в каждом месяце, да и с учётом високосного года.
Номер ответа: 30
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #30
Добавлено: 22.07.05 17:35
Чтобы убедиться, сделай
DateDiff("m", "21.09.2004", "22.07.2005"
Так что твой код не работает.
Чтобы разубедиться, сделай
DateDiff("m", "21.09.2004", "22.07.2005"
DateDiff("m", "20.09.2004", "22.07.2005"
DateDiff("m", "19.09.2004", "22.07.2005"
DateDiff("m", "28.09.2004", "22.07.2005"
DateDiff("m", "08.09.2004", "22.07.2005"
Во всех пяти случаях ты получишь десять. Так что твои аргументы, мягко говоря, "не весомы"