IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Как правильно сравнивать даты?
benchpress
сообщение Oct 3 2003, 19:35
Сообщение #1


Пользователь
**

Группа: Пользователи
Сообщений: 63
Регистрация: 1-September 03
Пользователь №: 454



Как правильно сравнивать даты, в случае если сравниваемые значения имеют состав Дата+Время, а сравнить необходимо только дату?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Alien
сообщение Oct 3 2003, 19:54
Сообщение #2


Пользователь
**

Группа: Пользователи
Сообщений: 34
Регистрация: 16-September 03
Из: Москва
Пользователь №: 558



Видимо так:
Код
КолДней=Окр((Дат2-Дат1)/(60*60*24),0,0)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 3 2003, 20:13
Сообщение #3


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



А лучше так:
НачалоДня(Дата1) _?_ НачалоДня(Дата2)
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Duke
сообщение Oct 3 2003, 21:12
Сообщение #4


Пользователь
**

Группа: Пользователи
Сообщений: 94
Регистрация: 3-September 03
Из: Под Питером
Пользователь №: 466



Чего вы мучаетесь?! Проще всего действует функция Дата() - почитайте о ней внимательнее smile.gif


--------------------
И кто это тут разговорился?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 3 2003, 21:34
Сообщение #5


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



Функция "Дата(Х)" преобразует значение "Х" из произвольного типа в тип "Дата". к сабжу она отношения не имеет sad.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Crocy
сообщение Oct 4 2003, 00:31
Сообщение #6


Продвинутый
***

Группа: Пользователи
Сообщений: 158
Регистрация: 16-September 03
Пользователь №: 559



с помощью функции День(Дата) можно сравнить даты, заданные в виде Дата+Время.

Если уж совсем ничего не получается ,см. Синтаксис-Помошник smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 4 2003, 07:55
Сообщение #7


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



Цитата(Crocy @ Oct 4 2003, 01:31)
с помощью  функции День(Дата)  можно сравнить даты, заданные в виде Дата+Время.

Сравни мне пожалуйста следующие даты:
21.09.2003 и 22.08.2003.
какая из них по твоему методу сравнения будет больше? laugh.gif

Встроенные функции языка
День (Day)
Синтаксис:
День(<Дата>)
Параметры:
<Дата> (обязательный)
Тип: Дата. Исходная дата.
Возвращаемое значение:
Тип: Число. День в указанной дате.
Описание:
Определяет календарный день в указанной дате.


И прежде чем посылать людей в синтакс-помошник, неплохо бы его самому посмотреть повнимательнее wink.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
ZAV
сообщение Oct 4 2003, 13:01
Сообщение #8


Сильно пишущий
****

Группа: Администрация
Сообщений: 3429
Регистрация: 24-July 03
Из: Москва
Пользователь №: 4



Цитата(StarKite @ Oct 3 2003, 21:13)
А лучше так:
НачалоДня(Дата1) _?_ НачалоДня(Дата2)

Это самый правильный ответ.
Помещай в ФАК.


--------------------
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Duke
сообщение Oct 4 2003, 16:34
Сообщение #9


Пользователь
**

Группа: Пользователи
Сообщений: 94
Регистрация: 3-September 03
Из: Под Питером
Пользователь №: 466



Цитата(StarKite @ Oct 3 2003, 22:34)
Функция "Дата(Х)" преобразует значение "Х" из произвольного типа в тип "Дата". к сабжу она отношения не имеет sad.gif

Еще как имеет! Она из объекта Дата+Время оставляет только Дату.
Я именно так и сравнивал у себя даты 8.0 и 7.7.
И возвращает она, получается, то же начало дня (00ч00м00с).


--------------------
И кто это тут разговорился?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 4 2003, 17:49
Сообщение #10


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



Цитата(Duke @ Oct 4 2003, 17:34)
Цитата(StarKite @ Oct 3 2003, 22:34)
Функция "Дата(Х)" преобразует значение "Х" из произвольного типа в тип "Дата". к сабжу она отношения не имеет sad.gif

Еще как имеет! Она из объекта Дата+Время оставляет только Дату.
Я именно так и сравнивал у себя даты 8.0 и 7.7.
И возвращает она, получается, то же начало дня (00ч00м00с).

Отвечаешь за свои слова? как специалист по v8??? mad.gif

пишем в коде:
Дата1=Текущаядата();
Дата2=ТекущаяДата()+1;
Д1=Дата(Дата1);
Д2=Дата(Дата2);


имеем в табло:
Дата1 = 04.10.2003 18:36:36
Дата2 = 04.10.2003 18:36:37
Д1=04.10.2003 18:36:36
Д2=04.10.2003 18:36:37


при сравнении Д1=Д2 получаем Ложь, хотя дата у них одинакова.

Цитата
Я именно так и сравнивал у себя даты 8.0 и 7.7.
а что, разьве в 7.7 у даты тоже составной тип??? biggrin.gif
---------------------------------------------
А теперь некоторые отстраненные соображения на тему:
если в v8 создать реквизит (у документа, справочника, формы, ...) с типом "Дата" и уточнением ЧастиДаты.Дата, то при записи любой даты в такой реквизит она автоматически приводится к началу дня, и дельнейшие преобразования с ней делать не нужно (хотя она по прежнему сохраняет составной тип).

Сообщение отредактировал StarKite - Oct 17 2003, 07:15
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Duke
сообщение Oct 6 2003, 10:12
Сообщение #11


Пользователь
**

Группа: Пользователи
Сообщений: 94
Регистрация: 3-September 03
Из: Под Питером
Пользователь №: 466



Цитата(StarKite @ Oct 4 2003, 18:49)
а что, разьве в 7.7 у даты тоже составной тип??? biggrin.gif

А ты посмотри в отладчике, когда до 7.7 по ОЛЕ достучишься. smile.gif


--------------------
И кто это тут разговорился?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
fishca
сообщение Oct 6 2003, 12:05
Сообщение #12


Продвинутый
***

Группа: Пользователи
Сообщений: 183
Регистрация: 26-August 03
Пользователь №: 412



Есть такие функции День(),Месяц(),Год(). Бери их значения и сравнивай.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 6 2003, 12:06
Сообщение #13


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



Цитата(Duke @ Oct 6 2003, 11:12)
Цитата(StarKite @ Oct 4 2003, 18:49)
а что, разьве в 7.7 у даты тоже составной тип??? biggrin.gif

А ты посмотри в отладчике, когда до 7.7 по ОЛЕ достучишься. smile.gif

в отладчике чего? компилятора C++? laugh.gif или все таки 1С v8?
Если v8 - то это закономерно, потому что v8 преобразует значение типа "ТолькоДатаV7.7" в свой тип "Дата+Время" и далее ты уже работаешь со стандартной датой формата v8 со всеми вытекающими. причем дата в этом случае должна автоматически приводиться к началу дня, потому что составляющей времени в v7.7 изначально нет. (исключение - позиция докамента из v7.7. не знаю как она отразится в v8).

Значит ты не хочешь признать поражение??? тогда напиши мне кусок кода с использованием встроенной функции "Дата()", который гарантированно сравнит встроенный реквизит документа "Дата" и результат встроенной функции "ТекущаяДата()". Цель сравнения - введен документ сегодня или нет. Результат - Истина = сегодня, Ложь = не сегодня.

Цитата(fishca)
Есть такие функции День(),Месяц(),Год(). Бери их значения и сравнивай. 

Можно конечно и так. только ты не запаришься трехэтажные условия городить? biggrin.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Duke
сообщение Oct 6 2003, 14:56
Сообщение #14


Пользователь
**

Группа: Пользователи
Сообщений: 94
Регистрация: 3-September 03
Из: Под Питером
Пользователь №: 466



Цитата(StarKite @ Oct 6 2003, 13:06)
в отладчике чего? компилятора C++? laugh.gif или все таки 1С v8?
Если v8 - то это закономерно, потому что v8 преобразует значение типа "ТолькоДатаV7.7" в свой тип "Дата+Время" и далее ты уже работаешь со стандартной датой формата v8 со всеми вытекающими. причем дата в этом случае должна автоматически приводиться к началу дня, потому что составляющей времени в v7.7 изначально нет. (исключение - позиция докамента из v7.7. не знаю как она отразится в v8).

Мда... Развернутый ответ biggrin.gif А надо было так отвечать? biggrin.gif

Ошибку-то свою признаю smile.gif Все очень просто - когда у себя насоздавал документов, то присваивал им только даты, без времени, поэтому они у меня все оказались на 00ч00м00с smile.gif
Конечно, когда увидел ответы, червячок сомнения свое дело сделал и я проверил алгоритм. Ничего не писал, потому что сам же ты и ZAV до меня уже ответили.


--------------------
И кто это тут разговорился?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
StarKite
сообщение Oct 6 2003, 15:32
Сообщение #15


Продвинутый
***

Группа: Пользователи
Сообщений: 126
Регистрация: 15-September 03
Из: Moscow
Пользователь №: 549



Ладно, раз истина восторжествовала, отметим это кружечкой пива smile.gif

------------------------------------

во избежание дальнейших баталий - всем:
смотрите FAQ.

cool.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 21st November 2018 - 00:21