Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Количество дней до события / 25 сообщений из 32, страница 1 из 2
30.04.2009, 17:31
    #35963958
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Здраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox.
Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней.
Формат даты: SET DATE GERMAN
...
Рейтинг: 0 / 0
30.04.2009, 17:34
    #35963967
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
...
Рейтинг: 0 / 0
30.04.2009, 17:35
    #35963969
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Где то недавно это обсуждалось :-) На страницы так 2-е, 3-и.
...
Рейтинг: 0 / 0
30.04.2009, 17:35
    #35963970
AK-Shah
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
thisform.txtDateRojd.Value = DATE()-date_rojd
...
Рейтинг: 0 / 0
30.04.2009, 17:40
    #35963975
GoshaS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
http://www.sql.ru/forum/actualthread.aspx?tid=649550
...
Рейтинг: 0 / 0
30.04.2009, 18:07
    #35964028
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
AK-Shah,
твой спосо не канает, потому что тут учитывается год разница между 1988 и 2008 годом составит примерно 7000 дней. в итоге я никогда неполучу при таком способе, что до дня рождения человеку осталось 30 дней.
...
Рейтинг: 0 / 0
30.04.2009, 18:29
    #35964059
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
GoshaShttp://www.sql.ru/forum/actualthread.aspx?tid=649550
Ненашол там именно для моего случая примера. Я ту тему два раза читал до того как создал свою.
Там промежутки и тд и тп. А мне надо конкретное количество дней до дня рождения. Я недогнал как сделать через промежутки.

Пытался даже:
В данном случае Date() имеет значени 30.04.09, а plan_sotr.god_rojd имеет значение 03.06.1988
thisfotm.text21.value = RIGHT(DTOS(DATE()),4)-RIGHT(DTOS(plan_sotr.god_rojd),4)
При выполнении в текстебоксе получаю: 04300603
...
Рейтинг: 0 / 0
30.04.2009, 18:32
    #35964065
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
...
Рейтинг: 0 / 0
30.04.2009, 21:27
    #35964222
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
set date german
set century on

? ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17}))

Ps. до моего дня рождения осталось ....
...
Рейтинг: 0 / 0
30.04.2009, 21:55
    #35964237
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
DisaerЗдраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox.
Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней.
Формат даты: SET DATE GERMAN

Это круто.

TextBox.value=date()-god_rojd
SET FILTER TO date()-god_rojd<30

Или надо с десяток ссылок в инете ?
...
Рейтинг: 0 / 0
30.04.2009, 21:57
    #35964240
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Guest12345set date german
set century on

? ? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17}))

Ps. до моего дня рождения осталось ....

Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые.
...
Рейтинг: 0 / 0
30.04.2009, 22:00
    #35964242
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
rewareDisaerЗдраствуйте, есть в таблице поле (god_rojd) типа date хранящее дату рождения. Мне нужно узнать разницу в днях между текущей датой и датой рождения, разницу выводить в TextBox.
Все это нужно для установки фильтра, на форме есть кнопка "Показать именинников", при нажатии на кнопку должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней.
Формат даты: SET DATE GERMAN

Это круто.

TextBox.value=date()-god_rojd
SET FILTER TO date()-god_rojd<30

Или надо с десяток ссылок в инете ?

Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням.
...
Рейтинг: 0 / 0
30.04.2009, 22:14
    #35964248
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Disaer[quot Guest12345]set date german
set century on

? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17}))

Ps. до моего дня рождения осталось ....

Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые.[/quot

Только надо смотреть если результат положительный, то до текущего события осталось
столько дней сколько получается, а если отрицательный, значит событие уже прошло,
и не совсем наверно правильно показывает, ну мысль наверно можно поправить
в нужном направлении
...
Рейтинг: 0 / 0
30.04.2009, 22:26
    #35964256
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Guest12345Disaer[quot Guest12345]set date german
set century on

? INT(((YEAR(DATE())-YEAR({^1972.05.17}))*365.25)-(DATE() - {^1972.05.17}))

Ps. до моего дня рождения осталось ....

Спасибо очень помогло. Только у меня тут пришлось поменять фигурные скобки на круглые.[/quot

Только надо смотреть если результат положительный, то до текущего события осталось
столько дней сколько получается, а если отрицательный, значит событие уже прошло,
и не совсем наверно правильно показывает, ну мысль наверно можно поправить
в нужном направлении

Угу в некоторых случаях получается отрицательный ответ, поэтому я к этому результату длаю проверку.
d = INT(((YEAR(DATE())-YEAR((plan_sotr.god_rojd)))*365.25)-(DATE() - (plan_sotr.god_rojd)))
IF d>=0
thisform.text21.Value = d
ELSE
thisform.text21.Value = d+365
ENDIF
...
Рейтинг: 0 / 0
30.04.2009, 22:34
    #35964263
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Disaer
Угу в некоторых случаях получается отрицательный ответ, поэтому я к этому результату длаю проверку.
d = INT(((YEAR(DATE())-YEAR((plan_sotr.god_rojd)))*365.25)-(DATE() - (plan_sotr.god_rojd)))
IF d>=0
thisform.text21.Value = d
ELSE
thisform.text21.Value = d+365
ENDIF

Да, так в целом почти правильно, только 1 следующий день после рождения
неправильно показывает 0 дней, а все остальные дни нормально12345
...
Рейтинг: 0 / 0
30.04.2009, 22:44
    #35964266
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Думаю так правильно будет

SET TALK OFF
SET DATE GERMAN
SET CENTURY on
CLEAR

mydata={^1972.05.17}
d1=INT(((YEAR(DATE())-YEAR(mydata))*365.25)-(DATE() - mydata))

IF d1>0
d2 = d1
ELSE
IF d1=0
IF DAY(mydata)=DAY(DATE())
d2=0
ELSE
d2=365
ENDIF
ELSE
d2 = d1+365
ENDIF
ENDIF

MESSAGEBOX('До моего дня рождения осталось:'+ALLTRIM(STR(d2))+' дней.')
...
Рейтинг: 0 / 0
30.04.2009, 23:52
    #35964292
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Думаю проще всего так :)

d = DATE(YEAR(DATE()),MONTH(DATE()),DAY(DATE()))-DATE(YEAR(DATE()),MONTH(plan_sotr.god_rojd),DAY(plan_sotr.god_rojd))
IF d<0
d = d*(-1)
thisform.text21.Value = d
ELSE
thisform.text21.Value = d
ENDIF

(PS: только вот незнаю как теперь фильтр поставить, таблица называется sotrydnik, имя поля god_rojd. Мне нада только те записи, у которых количество дней до дня рождения не превышает 30. Set filter похоже тут непрокатит, может это всо запихнуть в курсор? Помогите :) )
...
Рейтинг: 0 / 0
01.05.2009, 01:08
    #35964319
guest12345
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Окончательный вариант оформленный в виде функции

SET TALK OFF
SET DATE GERMAN
SET CENTURY on
CLEAR

mydata1={^1972.05.17}
mydata2=DATE()
mydata3={^2009.12.31}
mydata4={^2010.01.01}

* первый параметр функции dodobday - день рождения
* второй необязательный, по умолчанию равен DATE()
* ? dodobday()
? DATE(), ' - ', mydata1, dodobday(mydata1)
?
? mydata2, ' - ', mydata1, dodobday(mydata1,mydata2)
?
? {^2009.05.16}, ' - ', mydata1, dodobday(mydata1,{^2009.05.16})
?
? {^2009.05.17}, ' - ', mydata1, dodobday(mydata1,{^2009.05.17})
?
? {^2009.05.18}, ' - ', mydata1, dodobday(mydata1,{^2009.05.18})
?
? mydata3, ' - ', mydata1, dodobday(mydata1,mydata3)
?
? mydata4, ' - ', mydata1, dodobday(mydata1,mydata4)

FUNCTION dodobday
PARAMETERS d1,d2
PRIVATE d3,d4
IF parameters()<1
MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1, d2 - две даты')
RETURN .f.
ENDIF
IF parameters()=1
d2=DATE()
IF VARTYPE(d1) # 'D'
MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1 - дата')
RETURN .f.
ENDIF
ENDIF
IF parameters()=2
IF VARTYPE(d1) # 'D' AND VARTYPE(d2) # 'D'
MESSAGEBOX('Задайте параметры функции dodobday:'+CHR(10)+CHR(13)+'d1, d2 - две даты')
RETURN .f.
ENDIF
ENDIF
d3= LTRIM(STR(YEAR(d2))) + RIGHT(DTOC(d1,1),4)
d3= CTOD('^'+LEFT(d3,4)+'.'+SUBSTR(d3,5,2)+'.'+RIGHT(d3,2))
IF (d3-d2)<0
d3= LTRIM(STR(YEAR(d2)+1)) + RIGHT(DTOC(d1,1),4)
d3= CTOD('^'+LEFT(d3,4)+'.'+SUBSTR(d3,5,2)+'.'+RIGHT(d3,2))
ENDIF
RETURN d3-d2
ENDFUNC
...
Рейтинг: 0 / 0
01.05.2009, 01:33
    #35964321
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Disaer
Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням.

А можно печатным языком, или эмоции захлестывают ?

? {^2009-01-01}-{^1988-01-01} возвращает 7671. Под VFP9+SP2. Под WinXP+SP3. У вас не так ? Можно внятно обьяснить, что не устраивает ? "Что ясно представляется, то ясно излагается" (C) Не помню кто.
...
Рейтинг: 0 / 0
01.05.2009, 01:50
    #35964323
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
rewareDisaer
Так как ты написал нереботает нехера!!! Так сгодится только если у тебя год рождения и текущий год одинаковы. А когда у тебя разница в 20 лет будет, ты никогда число <30 неполучишь. иди проверь если невериш. разница между датами 2009 года и 1988 года примерно равны 7000 дням.

А можно печатным языком, или эмоции захлестывают ?

? {^2009-01-01}-{^1988-01-01} возвращает 7671. Под VFP9+SP2. Под WinXP+SP3. У вас не так ? Можно внятно обьяснить, что не устраивает ? "Что ясно представляется, то ясно излагается" (C) Не помню кто.

Читаем первое сообщение. Там явно сказано что нужно отбирать людей у которых до дня рождения осталось 30 или менее дней.
Теперь читаем читаем твой текст: "{^2009-01-01}-{^1988-01-01} возвращает 7671 дней . Помоему 30 и 7671 день сильно отличаются :) 7671 получается из за тго, что ФокПро щитают разницу между датами в днях! Поэтому чтобы выводилась разница в днях, нужно в переменную занести дату рождения человека, предварительно заменив год на текущий.
Теперь вам понятно?
...
Рейтинг: 0 / 0
01.05.2009, 08:36
    #35964369
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Disaer
Читаем первое сообщение. Там явно сказано что нужно отбирать людей у которых до дня рождения осталось 30 или менее дней.
Теперь читаем читаем твой текст: "{^2009-01-01}-{^1988-01-01} возвращает 7671 дней . Помоему 30 и 7671 день сильно отличаются :) 7671 получается из за тго, что ФокПро щитают разницу между датами в днях! Поэтому чтобы выводилась разница в днях, нужно в переменную занести дату рождения человека, предварительно заменив год на текущий.
Теперь вам понятно?

Да мне давно все понятно. Надеюсь, и вам после столь долгих и глубоких рассуждений стало понятно, что проблема не в том, чтобы отфильтровать по количеству оставшихся дней, а в решении огромной технической проблемы - подстановки нужного (текущего) года в дату рождения. Или тред еще на двести мессаг разовьется ?
...
Рейтинг: 0 / 0
01.05.2009, 10:18
    #35964396
Disaer
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
Лучше помогите теперь выбрать данные из таблицы, либо в новую таблицу, либо в курсор, где сотруднику осталось 30 или менее дней до ДР.
...
Рейтинг: 0 / 0
01.05.2009, 20:59
    #35964781
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
DisaerЛучше помогите теперь выбрать данные из таблицы, либо в новую таблицу, либо в курсор, где сотруднику осталось 30 или менее дней до ДР.

Чего ради страждущего не сделаешь :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE CURSOR drs (fio c( 20 ), dr d)
INSERT INTO drs (fio, dr) VALUES ('Петров', {^ 1990 . 01 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Иванов', {^ 1990 . 05 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Сидоров', {^ 1990 . 06 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Павлов', {^ 1990 . 07 . 21 })

SELECT fio, dr, DAY(drs.dr) as p1, MONTH(drs.dr) as p2 FROM drs ;
	WHERE DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))-DATE()< 30  AND ;
	DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))-DATE()> 0  AND ;
	NOT EMPTY(DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))-DATE()) ;
	INTO CURSOR drs2

BROWSE FIELDS fio, dr
CLOSE DATABASES
RETURN
...
Рейтинг: 0 / 0
01.05.2009, 22:09
    #35964824
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
DisaerGoshaS http://www.sql.ru/forum/actualthread.aspx?tid=649550
Ненашол там именно для моего случая примера. Я ту тему два раза читал до того как создал свою.
Там промежутки и тд и тп. А мне надо конкретное количество дней до дня рождения. Я недогнал как сделать через промежутки.

Читаем постановку задачи по приведенной ссылке

Из справочника персонала выбрать всех людей, у которых день рождения на этой неделе, вне зависимости от года
Или выражаясь вашими словами

должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 7 дней.
Читаем вашу постановку задачи

должен установиться фильтр отображающий людей у которых до дня рождения осталось менее 30 дней.
Т.е. отличие вашей задачи от той, что по ссылке всего лишь в том, что вам надо указать интервал не в 7 дней, а в 30. Решение там приведено. Надо всего-лишь заменить число 7 на число 30.
...
Рейтинг: 0 / 0
02.05.2009, 10:32
    #35965018
reware
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество дней до события
С некоторыми изменениями для подстраховки от високосного года :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE CURSOR drs (fio c( 20 ), dr d)
INSERT INTO drs (fio, dr) VALUES ('Петров', {^ 1990 . 01 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Сидоров', {^ 1990 . 05 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Семенов', {^ 1990 . 06 . 21 })
INSERT INTO drs (fio, dr) VALUES ('Павлов', {^ 1990 . 07 . 21 })

wh="iif(NOT EMPTY(DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))),"+ ;
	"DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))-DATE()<30,"+ ;
	"DATE(YEAR(DATE()), 2, 28)-DATE()<30) AND "+ ;
	"iif(NOT EMPTY(DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))),"+ ;
	"DATE(YEAR(DATE()), MONTH(drs.dr), DAY(drs.dr))-DATE()>0,"+ ;
	"DATE(YEAR(DATE()), 2, 28)-DATE()>0)"
	
SELECT fio, dr FROM drs ;
	WHERE &wh ;
	INTO CURSOR drs2
IF _TALLY= 1 
	=MESSAGEBOX('Опять Сидорова поздравлять...')
ENDIF 
BROWSE FIELDS fio, dr
CLOSE DATABASES
RETURN
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Количество дней до события / 25 сообщений из 32, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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