Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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 = DateDiff("d", Now, "15.05.2006", vbMonday, vbUseSystem)



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";)
Во всех пяти случаях ты получишь десять. Так что твои аргументы, мягко говоря, "не весомы" :)

Ответить

Страница: 1 | 2 | 3 | 4 | 5 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам