Консультация № 176335
27.01.2010, 09:15
35.77 руб.
0 10 1
Уважаемые эксперты, подскажите в следующем:
Месяц = "5"
Дата = "22.09.2010"
Результат = DateDiff("m", Месяц, Дата)
Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.") 'получаем 20 августа 1903 г., почему так происходит ????
'как сделать, чтобы было правильно, и если учесть, что ещё возможно будут отниматься и месяцы и дни ????
Спасибо Эндрю

Обсуждение

Неизвестный
27.01.2010, 10:56
общий
Ципихович Эндрю:
http://msdn.microsoft.com/ru-ru/library/b5xbyt6f.aspx
Там все написано...
Вместо переменной "Месяц" вы должны использовать дату, а вы даете просто число 5, которое при переводе в дату дает 04.01.1900
давно
Модератор
137394
1850
27.01.2010, 11:24
общий
Ципихович Эндрю:
Чего вы добиваетесь своим кодом? Какая задача? Прибавить к дате 5 месяцев? Что должно быть в ответе? 22 февраля 2010 г. ?
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Неизвестный
27.01.2010, 18:05
общий
Patriotix-N:
Если DateDiff, тогда отнять пять месяцев и попутно, чтобы всё сразу решить также как будет если онять 5 месяцев и 5 дней
Эндрю
Неизвестный
27.01.2010, 18:31
общий
Megaloman:
Смотрел я по указанной Вами ссылке, пример скопировал не работает
А что разве конструкцией Результат = DateDiff("m", Месяц, Дата)
Я не вычту от "Дата" "Месяц" в формате m???
Неизвестный
27.01.2010, 18:38
общий
Ципихович Эндрю:
Используйте для сложения и вычитания DateAdd
http://msdn.microsoft.com/ru-ru/library/hcxe65wz.aspx
Неизвестный
27.01.2010, 18:42
общий
Ципихович Эндрю:
Цитата: 238244

А что разве конструкцией Результат = DateDiff("m", Месяц, Дата)
Я не вычту от "Дата" "Месяц" в формате m???

Нет
Обязательный параметр. Значение перечисления DateInterval или выражение String, представляющее интервал времени, используемый в качестве единицы измерения разницы между Date1 и Date2.

Первый параметр указывает на формат возвращяемого значения, а второй и третий должны быть ДАТАМИ, а число "5" - не является датой, точнее является, но не количеством месяцем, а датой 04.01.1900
Неизвестный
27.01.2010, 18:49
общий
Цитата: 238244
онять 5 месяцев и 5 дней

http://msdn.microsoft.com/ru-ru/library/bbx05d0c.aspx
Дата = "22.09.2010"
iVar1 = DateSerial(Year(Дата) , Month(Дата)-5, Day(Дата)-5)
давно
Модератор
137394
1850
27.01.2010, 19:21
общий
Ципихович Эндрю:
Смотрел я по указанной Вами ссылке
- я ссылок не делал.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
27.01.2010, 20:05
общий
это ответ
Здравствуйте, Ципихович Эндрю. Вот код, результат его работы в приложении, скачать рабочий пример можно здесь 6666.doc (38.5 кб).
Код:
 Месяц = 5                       ' На сколько месяцев пересчитать дату
Дни = 6 ' На сколько дней пересчитать дату
Лет = 4 ' На сколько лет пересчитать дату

Дата = "22.09.2010" ' Исходная Дата в символьном виде

ДатаDate = DateValue(Дата) ' преобразую дату из символьного типа в тип дата

Selection.TypeText Text:="-------------------------------------------" + vbCrLf
Selection.TypeText Text:="Пример 1 - к исходной дате добавим месяцы" + vbCrLf

Результат = DateAdd("m", Месяц, ДатаDate)

Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.")
Selection.TypeText Text:=" Исходная дата " + Дата + vbCrLf
Selection.TypeText Text:=CStr(Месяц) + " месяцев добавили" + vbCrLf
Selection.TypeText Text:=Результат_после_перевода_формата + vbCrLf

Selection.TypeText Text:="-------------------------------------------" + vbCrLf
Selection.TypeText Text:="Пример 2 - от исходной даты отнимем месяцы" + vbCrLf

Результат = DateAdd("m", -Месяц, ДатаDate)

Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.")
Selection.TypeText Text:=" Исходная дата " + Дата + vbCrLf
Selection.TypeText Text:=CStr(Месяц) + " месяцев вычли" + vbCrLf
Selection.TypeText Text:=Результат_после_перевода_формата + vbCrLf

Selection.TypeText Text:="-------------------------------------------" + vbCrLf
Selection.TypeText Text:="Пример 3 - от исходной даты отнимем дни" + vbCrLf

Результат = DateAdd("d", -Дни, ДатаDate)

Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.")
Selection.TypeText Text:=" Исходная дата " + Дата + vbCrLf
Selection.TypeText Text:=CStr(Дни) + " дней вычли" + vbCrLf
Selection.TypeText Text:=Результат_после_перевода_формата + vbCrLf

Selection.TypeText Text:="-------------------------------------------" + vbCrLf
Selection.TypeText Text:="Пример 4 - от исходной даты отнимем годы" + vbCrLf

Результат = DateAdd("yyyy", -Лет, ДатаDate)

Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.")
Selection.TypeText Text:=" Исходная дата " + Дата + vbCrLf
Selection.TypeText Text:=CStr(Лет) + " лет вычли" + vbCrLf
Selection.TypeText Text:=Результат_после_перевода_формата + vbCrLf

Selection.TypeText Text:="-------------------------------------------" + vbCrLf
Selection.TypeText Text:="Пример 5 - от исходной даты отнимем годы месяцы дни" + vbCrLf

Результат = DateAdd("yyyy", -Лет, ДатаDate)
Результат = DateAdd("m", -Месяц, Результат)
Результат = DateAdd("d", -Дни, Результат)

Результат_после_перевода_формата = Format(Результат, "dd mmmm yyyy г.")
Selection.TypeText Text:=" Исходная дата " + Дата + vbCrLf
Selection.TypeText Text:=CStr(Лет) + " лет вычли" + vbCrLf
Selection.TypeText Text:=CStr(Месяц) + " месяцев вычли" + vbCrLf
Selection.TypeText Text:=CStr(Дни) + " дней вычли" + vbCrLf
Selection.TypeText Text:=Результат_после_перевода_формата + vbCrLf
Извините, если сообщаю известное, но если в в редакторе макроса выделить наименование функции и нажать F1, то получим справку по функции, правда, на английском. Но фундаментальных знаний английского там не надо.

Приложение:
-------------------------------------------
Пример 1 - к исходной дате добавим месяцы
Исходная дата 22.09.2010
5 месяцев добавили
22 февраля 2011 г.
-------------------------------------------
Пример 2 - от исходной даты отнимем месяцы
Исходная дата 22.09.2010
5 месяцев вычли
22 апреля 2010 г.
-------------------------------------------
Пример 3 - от исходной даты отнимем дни
Исходная дата 22.09.2010
6 дней вычли
16 сентября 2010 г.
-------------------------------------------
Пример 4 - от исходной даты отнимем годы
Исходная дата 22.09.2010
4 лет вычли
22 сентября 2006 г.
-------------------------------------------
Пример 5 - от исходной даты отнимем годы месяцы дни
Исходная дата 22.09.2010
4 лет вычли
5 месяцев вычли
6 дней вычли
16 апреля 2006 г.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
давно
Модератор
137394
1850
28.01.2010, 09:59
общий
Ципихович Эндрю:
При прибавлении (вычитании) месяцев возможны коллизии, например: к 31.01.2010 добавить 1 мес получим 28.02.2010. Насколько это корректно, не берусь судить, но функция работает именно так.
Об авторе:
Понеже не словес красных бог слушает, но дел наших хощет
Форма ответа