powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дата - число
19 сообщений из 19, страница 1 из 1
Дата - число
    #33004637
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ли функиця переводящая год + месяц + день в чмсло и наоборот

например
первое число второго месяца третьего года
365(высокосный год) + 364(нормальный год) + 31(январь) + 1(февраля) = 761

Если нет и кто-то уже написал плиз поделитесь...
Не хочу изобретать колесо :-)

Заранее сенкс...
...
Рейтинг: 0 / 0
Дата - число
    #33004650
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неужели речь не о разнице между двумя датами? 8-|
...
Рейтинг: 0 / 0
Дата - число
    #33004661
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И не только
есть дата + определенное количество дней получить год меся день и сказать какой день недели(одним словом постороение графиков... че б их) :-(

И еще бог знает че ети пользователи захотят...
...
Рейтинг: 0 / 0
Дата - число
    #33004708
new_date = date() + nDay
cdow(new_date)
...
Рейтинг: 0 / 0
Дата - число
    #33004710
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, в принципе, есть функция SYS(11), например

Код: plaintext
?SYS( 11 ,date())  &&возвращает символьную строку
Только она возвращает количество дней по Юлианскому летоисчислению. Это такое немерянное число получается. Обратное преобразование такого числа в дату через функцию SYS(10)

Код: plaintext
?sys( 10 ,VAL(sys( 11 ,date())))
Но, по моему, проще самому вычислить разницу в днях между текущей датой и фиксированным днем:

Код: plaintext
?date() - {^ 2000 - 01 - 01 }
Разница двух дат - это количество дней между ними. При вычитании переменных формата DateTime получим количество секунд

Код: plaintext
?dateTime() - {^ 2000 - 01 - 01   00 : 00 : 00 }
...
Рейтинг: 0 / 0
Дата - число
    #33004749
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы мне надо было только разницу я бы и не спрашивал...

Мне надо че за день будет от даты + количество дней(например 10000)
Сколько там рабочих дней...
Сколько там выходных...
Сколько там еще бог знает чего...
Эт пользователи такие непредсказуемые...

Одним словом прейдется самому усе писать... А времени нету... Усе надо было на вчера :-(
...
Рейтинг: 0 / 0
Дата - число
    #33004974
Фотография Redrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот же было насчет дня! ;-)
Дмитрий Маликовnew_date = date() + nDay
cdow(new_date)

Ты на тридцать лет вперед смотришь? 8-\

Поищи "mkfox.fll" - куча всякого насчет дат... Может чего пригодится? Оно небольшое!
...
Рейтинг: 0 / 0
Дата - число
    #33005268
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пока тут висел топик...
Я уже написал прогу для разбирания - собирания даты...
Там есть функция подсчета (от и до) рабочих(пон-пят) и выходных(суб-вос)
Тута мона еще добавить функции вычисления праздников и т.п. и т.д.
Кого интересует и так для теста могу выложить код

...
Рейтинг: 0 / 0
Дата - число
    #33005763
CruelGenius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Меня интересует. ТОлько мне сегодня такой вопрос задали. Правда я ответил просто
- видите щтгружено 0 ! А почему? А потому что было - воскресенье!
...
Рейтинг: 0 / 0
Дата - число
    #33005859
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
PARAMETERS nach_data, con_data, kol_dney
PUBLIC my_chislo_nach, my_chislo_kon, my_data_tek1, my_data_tek2, rab_day, vix_day
STORE  0  TO rab_day, vix_day
kol_dney = IIF(!EMPTY(kol_dney),kol_dney, 0 )
my_chislo_nach = kol_dney(nach_data)
my_chislo_kon = IIF(!EMPTY(con_data),kol_dney(con_data,.T.),my_chislo_nach+kol_dney)

my_data_tek1 = poluch_daty(my_chislo_nach) && начальная дата
my_data_tek2 = poluch_daty(my_chislo_kon) && конечная дата

DO vichisl_rab_vix WITH my_chislo_nach, my_chislo_kon

PROCEDURE kol_dney && получить количество дней от начала света
	PARAMETERS my_date_all, dopol
	my_date = YEAR(my_date_all) + IIF(dopol, 1 , 0 )
	my_vis_god = IIF(my_date/ 4  = INT(my_date/ 4 ),.T.,.F.)
	my_val_do_vis = ROUND((my_date/ 4  - INT(my_date/ 4 )) *  4 , 0 )
	my_dni_do_vis =  365  * my_val_do_vis
	my_val_ostat = my_date - my_val_do_vis
	my_dni_ostat_vis = INT((my_val_ostat/ 4 )* 366 )
	my_dni_ostat_nor = INT((my_val_ostat-(my_val_ostat/ 4 ))* 365 )
	my_dni_ostat = my_dni_ostat_vis + my_dni_ostat_nor
	my_dni_dopol = kol_dney_mess(MONTH(my_date_all),DAY(my_date_all),my_vis_god)
	my_dni_all = my_dni_ostat + my_dni_do_vis + my_dni_dopol
RETURN my_dni_all

PROCEDURE kol_dney_mess && получить количество дней текущего года
	PARAMETERS my_mes, my_day, vis_god
	ret_day = my_day
	ret_day = IIF(my_mes> 1 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 2 ,ret_day+ 28 +IIF(vis_god, 1 , 0 ),ret_day)
	ret_day = IIF(my_mes> 3 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 4 ,ret_day+ 30 ,ret_day)
	ret_day = IIF(my_mes> 5 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 6 ,ret_day+ 30 ,ret_day)
	ret_day = IIF(my_mes> 7 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 8 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 9 ,ret_day+ 30 ,ret_day)
	ret_day = IIF(my_mes> 10 ,ret_day+ 31 ,ret_day)
	ret_day = IIF(my_mes> 11 ,ret_day+ 30 ,ret_day)
RETURN ret_day

PROCEDURE poluch_daty && получить дату по количеству всех дней
	PARAMETERS chislo_dati
	my_chislo_visok = INT(chislo_dati/( 4 * 366 ))
	my_chislo_visok = IIF(my_chislo_visok> 0 ,my_chislo_visok+ 1 , 1 )
	my_chislo_normal = INT((chislo_dati-(my_chislo_visok* 366 ))/ 365 )
	my_yer = IIF(chislo_dati> 366 ,my_chislo_visok+my_chislo_normal, 0 )
	my_vis_god = IIF(my_yer/ 4  = INT(my_yer/ 4 ),.T.,.F.)
	my_month_day = chislo_dati - (my_chislo_normal *  365  + my_chislo_visok *  366 )
	my_month = poluch_month(my_month_day,my_vis_god)
	my_day = my_month_day - kol_dney_mess(my_month, 0 ,my_vis_god) && получить количество дней текущего месяца
	ret_date = IIF(my_day< 10 ,'0','') + ALLTRIM(STR(my_day)) + IIF(my_month< 10 ,'.0','.') + ALLTRIM(STR(my_month)) + '.' + ALLTRIM(STR(my_yer))
RETURN ret_date

PROCEDURE poluch_month && получить месяц по количеству дней с начало года
	PARAMETERS kol_dn, vis_god
	my_day_vis = IIF(vis_god, 1 , 0 )
	DO CASE
		CASE kol_dn >  334  + my_day_vis
			my_ret_month =  12 
		CASE kol_dn >  304  + my_day_vis
			my_ret_month =  11 
		CASE kol_dn >  273  + my_day_vis
			my_ret_month =  10 
		CASE kol_dn >  243  + my_day_vis
			my_ret_month =  9 
		CASE kol_dn >  212  + my_day_vis
			my_ret_month =  8 
		CASE kol_dn >  181  + my_day_vis
			my_ret_month =  7 
		CASE kol_dn >  151  + my_day_vis
			my_ret_month =  6 
		CASE kol_dn >  120  + my_day_vis
			my_ret_month =  5 
		CASE kol_dn >  90  + my_day_vis
			my_ret_month =  4 
		CASE kol_dn >  59  + my_day_vis
			my_ret_month =  3 
		CASE kol_dn >  31  + my_day_vis
			my_ret_month =  2 
		OTHERWISE
			my_ret_month =  1 
	ENDCASE
RETURN my_ret_month

PROCEDURE vichisl_rab_vix && получить количество рабочих и выходных дней
	PARAMETERS ot_chisla, do_chisla
	FOR my_1 = ot_chisla TO do_chisla
		my_data_tek = poluch_daty(my_1)
		my_date_vix_rab = CDOW(CTOD(my_data_tek))
		DO CASE
			CASE LEFT(my_date_vix_rab, 1 )='S'
				vix_day = vix_day +  1 
			OTHERWISE
				rab_day = rab_day +  1 
		ENDCASE
	ENDFOR
ENDPROC

Писал на скорую руку... но вроде работает как дети в школу...

...
Рейтинг: 0 / 0
Дата - число
    #33005887
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получить количество дней от начала света:

? sys(11, date())

Количество дней текущего года - это разность между 1 января следующего года и 1 января текущего года:

lnYear = year(date())
? date(m.lnYear + 1, 1, 1) - date(m.lnYear, 1, 1)

Месяц по количеству дней с начало года:

? month(date(year(date()), 1, 1) + <число дней>)

авторПисал на скорую руку...

видно
...
Рейтинг: 0 / 0
Дата - число
    #33008130
IgorProgrammer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мда...
Дейсвительно че-тока не напишь когда напрягают...
Повтор в несколько раз меньше

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
PARAMETERS nach_data, con_data, kol_dney
PUBLIC my_chislo_nach, my_chislo_kon, my_data_tek1, my_data_tek2, rab_day, vix_day, kol_nedel
STORE  0  TO rab_day, vix_day, kol_nedel
kol_dney = IIF(!EMPTY(kol_dney),kol_dney, 0 )
my_chislo_nach = VAL(SYS( 11 ,nach_data))
my_chislo_kon = IIF(!EMPTY(con_data),VAL(SYS( 11 ,con_data)),my_chislo_nach+kol_dney)
my_data_tek1 = SYS( 10 ,my_chislo_nach) && начальная дата
my_data_tek2 = SYS( 10 ,my_chislo_kon) && конечная дата
DO vichisl_rab_vix WITH my_chislo_nach, my_chislo_kon
DO vichisl_nedel WITH my_chislo_nach, my_chislo_kon

PROCEDURE vichisl_rab_vix && получить количество рабочих и выходных дней
	PARAMETERS ot_chisla, do_chisla
	FOR my_1 = ot_chisla TO do_chisla
		my_date_vix_rab = DOW(CTOD(SYS( 10 ,my_1)))
		DO CASE
			CASE INLIST(my_date_vix_rab, 1 , 6 )
				vix_day = vix_day +  1 
			OTHERWISE
				rab_day = rab_day +  1 
		ENDCASE
	ENDFOR
ENDPROC

PROCEDURE vichisl_nedel && получить количество недель
	PARAMETERS ot_chisla, do_chisla
	my_nach_nedel = DOW(CTOD(SYS( 10 ,ot_chisla)))
	FOR my_1 = ot_chisla+ 1  TO do_chisla
		my_date_vix_rab = DOW(CTOD(SYS( 10 ,my_1)))
		kol_nedel = IIF(my_nach_nedel=my_date_vix_rab,kol_nedel+ 1 ,kol_nedel)
	ENDFOR
ENDPROC


...
Рейтинг: 0 / 0
Дата - число
    #33572373
Привет всем! У меня вот такая проблемка, вроде и не сложная, но что-то дадуть не могу с использованием как это сделать, используя стандартные функции для работы с датами! Проблема: есть дата рождения day и дата смерти day_out. По мед. стандартом, если ребенок умер до года то это значит, что day_out - day <= 11 месяцев 29 дней! И только так, переводить месяцы в дни нельзя! :( Если знает как это сделать подскажите пожалуйста!
Заранее благодарен!
...
Рейтинг: 0 / 0
Дата - число
    #33572839
Недоходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Попов Анатолий
Проблема не описана. Непонятно в чем нужна помощь.
...
Рейтинг: 0 / 0
Дата - число
    #33573522
Filipov Alexandr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
GOMONTH(day ,11)+29
"Попов Анатолий" <nospam@sql.ru>; сообщил/сообщила в новостях следующее:
news:2401686@sql.ru...
Привет всем! У меня вот такая проблемка, вроде и не сложная, но что-то
дадуть не могу с использованием как это сделать, используя стандартные
функции для работы с датами! Проблема: есть дата рождения day и дата смерти
day_out. По мед. стандартом, если ребенок умер до года то это значит, что
day_out - day <= 11 месяцев 29 дней! И только так, переводить месяцы в дни
нельзя! :( Если знает как это сделать подскажите пожалуйста!
Заранее благодарен!
Тема Ответить

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Дата - число
    #33573742
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вы сможете ответить что такое "месяц" и что такое "год", то можно написать код.

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

Ну, для примера. Какая разница будет между 27 января и 1 марта? Сколько месяцев и дней?

Если сначала прибавить к 27 января один календарный месяц, а потом посмотреть разницу в днях получим 1 месяц и 2 дня

Если сначала подсчитать количество дней до 1 февраля, а потом прибавить один месяц, то получим 1 месяц и 5 дней.

Оба ответа правильные. Только в каждом случае использовалась своя логика.

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

Кстати, ведь и в самой постановке задачи делается предположение, что месяц - это всегда 30 дней. Иначе откуда взялось число 29?
...
Рейтинг: 0 / 0
Дата - число
    #33573875
Crispy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Наверно можно сделать методом аппроксимации. Т.е. что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
data=day
m= 0 
DO WHILE data<day_out
   olddata=data
   data=GOMONTH(data,m)
   m=m+ 1 
ENDDO
* Тогда получается:
* m = число месяцев
* day_out - olddata = число дней
...
Рейтинг: 0 / 0
Дата - число
    #33575566
CrispyНаверно можно сделать методом аппроксимации. Т.е. что-то вроде
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
data=day
m= 0 
DO WHILE data<day_out
   olddata=data
   data=GOMONTH(data,m)
   m=m+ 1 
ENDDO
* Тогда получается:
* m = число месяцев
* day_out - olddata = число дней


Спасибо! Я впринципе тоже вышел на такой примерно вариант!
А для тех кто не понял почему 29! Это так идет по медицинским стандартам!
Там много подобных подводных камней, кроме дат! :)
...
Рейтинг: 0 / 0
Дата - число
    #33578629
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Анатолий!

А может быть тебе на самом деле достаточно всегда считать РОВНО ГОД - т.е.
GOMONTH(..., 12) - и если искомая дата меньше - значит год не прошел, если
больше или равна - значит прошёл... Ибо считать "точно" в системе
год/месяц/день нереально - слишком уж много противоречащих друг другу
вариантов будет.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Дата - число
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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