Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Определение даты  [new]
Людмila
Member

Откуда: Кировская обл.
Сообщений: 330
помогите Пожалуйста определить программно. например:
третье воскресение июня текущего (и т.д.) года (День медработника)
пока признаться - прописываю в коде ручками на каждый год.
Заранее Благодарю.
11 июн 21, 14:07    [22334405]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1595
Людмila,
?Date(Year(Date()), 7 , 1)+21-Dow(Date(Year(Date()), 7 , 1), 2)

подставить вместо Year(Date()) нужный год.
11 июн 21, 16:01    [22334480]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
Людмila
Member

Откуда: Кировская обл.
Сообщений: 330
Напрягла мозги и оказалось! что:
DOW(Date())=1 and BETW(DAY(Date()),15,21)
и есть третье воскресенье месяца, выходит:
Month(Date())=6 and DOW(Date())=1 and BETW(DAY(Date()),15,21)
- третье воскресенье июня - День Медработника!
12 июн 21, 07:14    [22334644]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
Правильно, конечно, но есть нюанс Что есть первый день недели определяет настройка

SET FDOW TO

и по умолчанию - это воскресенье, а вовсе не понедельник. Американцы же...

В данном случае, лучше все-таки вести календарь. Т.е. таблицу, где одна запись - это один день. Завести сразу лет на 10 (всего 3,5 тысячи строк). Многие операции с датами существенно упростятся
12 июн 21, 23:21    [22334768]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
Людмila
Member

Откуда: Кировская обл.
Сообщений: 330
Нуу, тогда конкретно!
DOW(Date(),1)=1  && Воскресенье
и никакое значение SET FDOW TO не повлияет (проверено!)
Предложение создать таблицу мне не подходит т.к. нужна 3 раза в году для появлении в программе заставки-поздравлении с Новым Годом, 8 Марта и днем Медработника в соответствующий диапазон дат.
По дню Медика переделала на
MONTH(_Diarydate)=6 AND BETW(_Diarydate,Date(Year(_Diarydate),6,1)+21-Dow(Date(Year(_Diarydate),6,1),2)-3,Date(Year(_Diarydate),6,1)+21-Dow(Date(Year(_Diarydate),6,1),2))
в июне 2021г. 17-20 числа будет висеть заставка "ДеньМедика"! Также протестировав и последующие годы работает правильно.
За что Большое Спасибо участнику Sergey Sizov.
13 июн 21, 01:48    [22334799]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7919
Людмila

Предложение создать таблицу мне не подходит т.к. нужна 3 раза в году для появлении в программе заставки-поздравлении с Новым Годом, 8 Марта и днем Медработника в соответствующий диапазон дат.


Три конкретных праздника вообще не требует никаких расчетов. Забить массив на несколько лет вперед и все. Прямо в той функции, которая возвращает значение

С праздниками дело такое, что в любой момент любой праздник может быть перенесен/отменен. Поэтому "в общем случае" без ведения календаря праздников - не обойтись

Таблица-календарь упросить очень много запросов, где требуется анализ дат или диапазонов. Не только для 3 праздников. Наверняка, есть еще много разных задач подобного рода
14 июн 21, 13:29    [22335020]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
Людмila
Member

Откуда: Кировская обл.
Сообщений: 330
ВладимирМ

Забить массив на несколько лет вперед и все.


Несколько лет назад я так и сделала, но эти несколько лет прошли (((
и пришлось копаться в исходниках и вспоминать как и что.

Считаю, что совместно с Вами удалось всё сделать "На Века"
за что Всем Большое Спасибо!
22 июн 21, 16:14    [22338715]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
AK-Shah
Member

Откуда:
Сообщений: 155
Людмila,

Отлично, что задача решена на века!

Но! В моей предыдущей конторе программно не получалось учесть праздники. Только табличкой.
26 июн 21, 00:28    [22340508]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
Людмila
Member

Откуда: Кировская обл.
Сообщений: 330
AK-Shah, не беда!
Совсем недавно я тоже не умела, и Вот!
4 июл 21, 17:27    [22343354]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
LUCIAN
Member

Откуда: Беларусь г.Лида
Сообщений: 193
Людмila,
Обобщая получается такая формула:
god=2021 && ГОД
nM=6     && номер месяца
nDN=1    && номер дня недели т.е. 1-вс,2-пн,3-вт,4-ср,5-чт,6-пт,7-сб
nND=3	 && номер недели в месяце
?DATE(god,nM,01)-IIF(nDN < DOW(DATE(god,nM,01)),DOW(DATE(god,nM,01))-nDN,DOW(DATE(god,nM,01))+7-nDN)+nND*7
7 июл 21, 10:15    [22344439]     Ответить | Цитировать Сообщить модератору
 Re: Определение даты  [new]
AK-Shah
Member

Откуда:
Сообщений: 155
Людмila,

Нет. Не учесть программно.
10 июл 21, 19:29    [22346041]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить