|
Количество дней между датами | ☑ | ||
---|---|---|---|---|
0
Amfiaray
22.05.18
✎
06:21
|
Добрый день!
Подскажите как получить количество дней между двумя датами при условии что количество дней в году 360, а количество дней в месяце 30. |
|||
1
craxx
22.05.18
✎
06:24
|
(ДатаПоздняя-ДатаРанняя)/86400
|
|||
2
craxx
22.05.18
✎
06:25
|
(1) Ну и округлить
|
|||
3
vde69
22.05.18
✎
06:27
|
(1) не правильно, читаем сабж внимательно...
количество дней в году 360 ! |
|||
4
vde69
22.05.18
✎
06:28
|
(0) тебе для начисления процентов?
|
|||
5
Amfiaray
22.05.18
✎
06:29
|
(4) Да, там много вариантов, в году может быть от 360 до 367 дней, в зависимости от базы расчета
|
|||
6
vde69
22.05.18
✎
06:31
|
(4) + если да, то примерно так (в запросе)
Выразить(РазностьДат(началопериода(дата1,день),началопериода(дата2,день))/365*360 как число 3.0) |
|||
7
vde69
22.05.18
✎
06:33
|
(5) правда есть нюансы перехода через год...
я писал функцию, она довольно объемная вышла, правда это было лет 10 назад... не найду сейчас... общий принцеп - делим период на года и для каждого года считаем свою разницу потом складываем |
|||
8
Amfiaray
22.05.18
✎
06:46
|
(7) Так и делал
РазностьЛет = (Год(Дата2)-Год(Дата1))*360; РазностьМесяцев = (Месяц(Дата2)-Месяц(Дата1))*30; РазностьДней = День(Дата2)-День(Дата1); РазностьДат = РазностьЛет+РазностьМесяцев+РазностьДней; Проблема в количестве дней в месяце Например Дата1 = 01.03.2017; Дата2 = 28.02.2018 Количество дней должно быть 360, вариант как в (4) дает 359 дней, вариант как у меня дает 357 дней ((( |
|||
9
vde69
22.05.18
✎
06:47
|
(0) как я понимаю надо что бы разности между датами были такими
1янв - 30янв = 29 дней 1янв - 31янв = 30 дней 1янв - 1февраля = 30 дней 1янв - 2февраля = 31 дней 1февр - 1 марта = 30 дней распиши на примере для остальных.... |
|||
10
Sammo
22.05.18
✎
06:50
|
Количество полных месяцев * 30 + остаток.
Если остаток > 30 - берм 30 дней |
|||
11
Amfiaray
22.05.18
✎
06:56
|
(10) а если это февраль, то 28 = 30
|
|||
12
Sammo
22.05.18
✎
06:57
|
В запросе - навскидку - разность дат в месяцах от начала месяца каждой даты, а затем доп анализ
1. Если день() от даты 1 (день с начала месяца) больше, чем день с даты 2, то разность дат (с учетом ограничений) 2. Если день от даты 1 меньше день от даты 2, то добавляем целый месяц (30 дней) + разница между дата 2 и дата1 + месяц Как-то так. |
|||
13
Sammo
22.05.18
✎
07:00
|
(11) Да, с учетом ферваля была доп. логика. Что-то из серии, что если дата2 = конец месяца дата 1 и дата 1 = начала месяца дата 1, то 30.
Т.к. с февралем забавность - 30 дней только если с 01.02 по 28 (или 29 для високосного) февраля. с 02 по 28 - уже 27. С 01 по 27 - тоже 27 дней. |
|||
14
Amfiaray
22.05.18
✎
07:16
|
Вот код запроса, вроде как всё правильно считает:
(ВЫРАЗИТЬ(ГОД(&дата2) - ГОД(&дата1) КАК ЧИСЛО(3, 0))) * 360 + (ВЫРАЗИТЬ(МЕСЯЦ(&дата2) - МЕСЯЦ(&дата1) КАК ЧИСЛО(3, 0))) * 30 + ВЫБОР КОГДА КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ) = КОНЕЦПЕРИОДА(&Дата2, МЕСЯЦ) ТОГДА 30 КОГДА НАЧАЛОПЕРИОДА(&Дата2, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата2, МЕСЯЦ) ТОГДА 0 ИНАЧЕ ДЕНЬ(&Дата2) КОНЕЦ - ВЫБОР КОГДА КОНЕЦПЕРИОДА(&Дата1, ДЕНЬ) = КОНЕЦПЕРИОДА(&Дата1, МЕСЯЦ) ТОГДА 30 КОГДА НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) = НАЧАЛОПЕРИОДА(&Дата1, МЕСЯЦ) ТОГДА 0 ИНАЧЕ ДЕНЬ(&Дата1) КОНЕЦ |
|||
15
catena
22.05.18
✎
07:27
|
ВЫБРАТЬ
&ДатаНач, &ДатаКон, РАЗНОСТЬДАТ(НачалоПериода(&ДатаНач, месяц), НачалоПериода(&ДатаКон, месяц), МЕСЯЦ) * 30 - 30 КАК ЦелыхМесяцев, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ), КОНЕЦПЕРИОДА(&ДатаНач, МЕСЯЦ), ДЕНЬ) + 1 КАК днейВМесНач, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаКон, МЕСЯЦ), КОНЕЦПЕРИОДА(&ДатаКон, МЕСЯЦ), ДЕНЬ) + 1 КАК днейВМесКон, РАЗНОСТЬДАТ(&ДатаНач, КОНЕЦПЕРИОДА(&ДатаНач, МЕСЯЦ), ДЕНЬ) + 1 КАК днейДоКОнцаНач, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаКон, МЕСЯЦ), &ДатаКон, ДЕНЬ) + 1 КАК днейСНачалаКон ПОМЕСТИТЬ тзР ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ тзР.ДатаНач, тзР.ДатаКон, тзР.ЦелыхМесяцев, тзР.днейВМесНач, тзР.днейВМесКон, тзР.днейДоКОнцаНач, тзР.днейСНачалаКон, Выразить(тзР.ЦелыхМесяцев+ тзР.днейДоКОнцаНач*30/тзР.днейВМесНач + тзР.днейСНачалаКон*30/тзР.днейВМесКон как число(3,0)) как Итог ИЗ тзР КАК тзР |
|||
16
SleepyHead
гуру
22.05.18
✎
07:41
|
(0) Для какой планеты код пишете?
|
|||
17
Amfiaray
22.05.18
✎
08:02
|
(16) Для планеты "Земля", учет операций по ценным бумагам, в правилах написано что расчет купона вознаграждения производится в зависимости от выбранной базы расчета, а вот базы расчеты бывают:
• Американский (NASD) 30/360; • Фактический/фактический; • Фактический/360; • Фактический/365; • Европейский 30/360; • Фактический/364; • Фактический/366; • Фактический/367 |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |