powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / количество дней между датами
19 сообщений из 19, страница 1 из 1
количество дней между датами
    #32410687
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как? В TSQL есть datedif()
А VFP я знаю только прямое вычитание из одной даты другую - правильно ли это?
...
Рейтинг: 0 / 0
количество дней между датами
    #32410696
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пральна!
...
Рейтинг: 0 / 0
количество дней между датами
    #32410707
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А строки конкатенируются "плюсом" - и это тоже правильно ;-)
...
Рейтинг: 0 / 0
количество дней между датами
    #32410715
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ok - допустим это легко прокатывает если нужно получить разницу в днях - а как ее получить в месяцах, неделях и т.д?
...
Рейтинг: 0 / 0
количество дней между датами
    #32410725
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще знак "/".
Например, (date2-date1)/7 - будет разница в неделях ;-)
...
Рейтинг: 0 / 0
количество дней между датами
    #32410726
Crip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ручками батенька...
Не забывая что кроме вычитания есть функции year() , month(),week(),day(),date().
Вообщем -то ИМХО ничего сложного нет...
...
Рейтинг: 0 / 0
количество дней между датами
    #32410734
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо

PS> а в месяцах?
...
Рейтинг: 0 / 0
количество дней между датами
    #32410737
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сходи сюда http://forum.foxclub.ru/read.php?f=5&i=66840&t=66840&v=f
...
Рейтинг: 0 / 0
количество дней между датами
    #32410755
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага! а то просто просто....
...
Рейтинг: 0 / 0
количество дней между датами
    #32410763
АлександрК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не пойдет?

MONTH(Date1) - MONTH(Date2)
...
Рейтинг: 0 / 0
количество дней между датами
    #32410766
Фотография Hel!Riser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crip грил, что ничего сложного ;)))
...
Рейтинг: 0 / 0
количество дней между датами
    #32410954
_ммм_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 АлександрК
set date german
set century on
? Month({01.02.2004}-{31.01.2004})
Это потянет на разницу в месяц ?
...
Рейтинг: 0 / 0
количество дней между датами
    #32411340
Фотография brahew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только еще не надо забывать, если дата хранится как datetime, то d2-d1 будет разница в секундах, надо еще ttod() дописывать
...
Рейтинг: 0 / 0
количество дней между датами
    #32411417
АлександрК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 _ммм_

Я предложил простейший вариант.
А вот как Вы хотите получить месяц из числа, а не из даты, для меня осталось загадкой.
...
Рейтинг: 0 / 0
количество дней между датами
    #32411572
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 _mmm_

Нет, так не пойдет - уже вместо 13 месяцев будет 1.
Потом, не надо забывать, что алгоритмы расчета будут разные для разных случаев.
Например, в очень многих аналитических расчетах мой месяц равен 28 или 30 дням. В этих случаях отнять дату одну от другой и поделить результат на 28 или 30 - самое быстрое. Тогда, к примеру:

Код: plaintext
mon_diff = (date2-date1)/ 30 

Если нужно установить точную разницу в календарных месяцах между датами, то это не совсем корректная задача, хотя бы потому, что количество дней в разных месяцах разное ;-). Тем не менее, в общем случае это решается так:

Если нужно абстрагироваться от дней и вычислить разницу в полных месяцах (хотя в этом случае мы получим при date2={^2004-01-31}, а date1={^2004-01-01} - вроде, между датами есть месяц - на самом деле 0; или date2={^2004-02-01}, а date1={^2004-01-31} - вроде всего 1 день - на самом деле 1 месяц ;-)) то:

Код: plaintext
mon_diff = (year(date2)-year(date1))* 12 +month(date2)-month(date1)


К этому можно добавить:

Код: plaintext
day_diff = date2 - gomonth(date1,mon_diff)
или
Код: plaintext
day_diff = day(date2)-day(date1)


(Количество дней погрешности вычисления разницы в месяцах, отнесенных к последнему месяцу, которое может быть и отрицательным. ;-))

Если хочется округлить до целых месяцев, то возможны варианты:
1. введем правило: если day_diff по модулю меньше 15, то mon_diff остается самой собой, иначе меняется на 1 в ту или иную сторону:

Код: plaintext
mon_diff = iif(abs(day_diff)< 15 ,mon_diff,mon_diff+sign(day_diff))

2. Если такая точность не устраивает, можно считать разницу по последнему месяцу:

Код: plaintext
last_mon_day= gomonth(date2 - day(date2)+ 1 , 1 ) - (date2 - day(date2)+ 1 ) - 1 

(можно сократить ;-))
Код: plaintext
last_mon_day=day(gomonth(date2 - day(date2)+ 1 , 1 )- 1 )
Тогда:

Код: plaintext
mon_diff = round(mon_diff + (day_diff/last_mon_day), 0 )


3. Если не устраивает последний месяц, можно так же поступить с первым.

4. Можно и еще точнее: посчитать долю дней до конца первого месяца, отнесенную к первому месяцу, сложить с долей дней с начала последнего месяца, отнесенных к последнему месяцу.

Если не надо округлять - и не округляйте.
Например, выбросить округление из предыдущей формулы:

Код: plaintext
mon_diff = mon_diff + (day_diff/last_mon_day)


Наконец, если нужно представить разницу в виде "плюс/минус столько-то месяцев и столько-то дней":

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
mon_diff = (year(date2)-year(date1))* 12 +month(date2)-month(date1)
day_diff = day(date2)-day(date1)

do case
case sign(mon_diff)*sign(day_diff) =  0 
  ? iif(sign(mon_diff)< 0  or sign(day_diff)< 0 , "-" , "")+str(abs(mon_diff))+"  месяцев  "+str(abs(day_diff))+"  дней "
case sign(mon_diff)*sign(day_diff) = -1 
  mon_diff=mon_diff+sign(day_diff)
  day_diff=day_diff-day(gomonth(date2 - day(date2)+ 1 , 1 )- 1 )
  ? iif(sign(mon_diff)< 0  or sign(day_diff)< 0 ,"- ","  ")+str(abs(mon_diff))+"  месяцев  "+str(abs(day_diff))+"  дней "
otherwise
  ? iif(sign(mon_diff)<0 ,"- ","  ")+str(abs(mon_diff))+"  месяцев  "+str(abs(day_diff))+"  дней"
endcase
Этот код можно оформить в виде пользовательской процедуры.
...
Рейтинг: 0 / 0
количество дней между датами
    #32412598
_ммм_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 АлександрК
Прошу извенить за опечатку - конечно же вопрос должен был стоять так

Month({01.02.2004}) - Month({31.01.2004})
...
Рейтинг: 0 / 0
количество дней между датами
    #32412755
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, похоже что нас всех не возьмут в Диасофт и Борлас

Сегодня решал аналогичную задачу. Шеф подошел и сказал, чтоб из этой разницы я вычел выходные и праздничные дни... Это меня сильно озадачило, но через полчаса он отменил это, сказав, что все сделает сам в Excel, тут я после этого его сильно зауважал... А может у него был готовый макрос?
...
Рейтинг: 0 / 0
количество дней между датами
    #32412922
Помнится, когда-то в кадровской программе руководство потребовало от меня, чтобы отработанное сотрудником на фирме время выводилсь в формате: "дней, месяцев, лет". Всё сделал - но только потом оказалось, что это никому не нужно... Поэтому согласен с Sergey Ch - нужно поручать начальство делать самому то, что оно ещё может делать...
...
Рейтинг: 0 / 0
количество дней между датами
    #32412924
TheBurn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>А может у него был готовый макрос?
Врядли... Выходные еще можно учесть в формуле, а праздники съежают друг относительно друга, переносятся на другие дни... Без дополнительной бызы с праздниками не получится - у меня для формирования графиков выхода используется полноценный календарь. Ващето в конце года публикуется информация о рабочих днях, праздниках, предпраздничных днях и нормы рабочего времени на год и помесячно
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / количество дней между датами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]