|
как можно получить разность 2х дат? | ☑ | ||
---|---|---|---|---|
0
LivingStar
07.02.12
✎
08:05
|
есть 2 даты:
Формат(Рез.ДатаЗаказа, "ДФ=dd.MM.yyyy") Формат(Рез.ДатаППВход, "ДФ=dd.MM.yyyy") как между ними получить разность в днях? Формат(Рез.ДатаЗаказа, "ДФ=dd.MM.yyyy") - Формат(Рез.ДатаППВход, "ДФ=dd.MM.yyyy") = ? |
|||
1
ZanderZ
07.02.12
✎
08:06
|
(Дата1 - Дата2) /86400
|
|||
2
napagokc
07.02.12
✎
08:09
|
тут уже стописяттыщраз этот вопрос обмусоливался так-то
|
|||
3
vde69
07.02.12
✎
08:11
|
запросом и там РазностьДат()
|
|||
4
DrShad
07.02.12
✎
08:11
|
если прямо в запросе то ты не поверишь РазностьДат()
|
|||
5
DrShad
07.02.12
✎
08:12
|
ТС уже почти 7 лет на форуме, а до сих пор ни справку ни СП не осилил :)
|
|||
6
D_Pavel
07.02.12
✎
08:13
|
Функция РазностьДат(Дата1,Дата2,вхТип="День") Экспорт
Запрос=Новый Запрос(" | SELECT РазностьДат(&Дата1,&Дата2,"+вхТип+") AS ВозвращаемаяДата |"); Запрос.УстановитьПараметр("Дата1",Дата1); Запрос.УстановитьПараметр("Дата2",Дата2); Выб=Запрос.Выполнить().Выбрать(); Выб.Следующий(); Возврат -Выб.ВозвращаемаяДата; КонецФункции |
|||
7
LivingStar
07.02.12
✎
08:13
|
(1) спасибо!
|
|||
8
LivingStar
07.02.12
✎
08:14
|
(6) спасибо!
|
|||
9
Luhtas
07.02.12
✎
08:14
|
(6) ООо-оо! Супер способ!
|
|||
10
D_Pavel
07.02.12
✎
08:15
|
всегда рад помочь
|
|||
11
SeraFim
07.02.12
✎
08:15
|
(6) мсье знает толк в извращениях...
|
|||
12
D_Pavel
07.02.12
✎
08:18
|
(11) Ты щас хрень написал, показывая свою глупость. Потому что это не извращение, а способ который используют опытные одинесники.
|
|||
13
ZanderZ
07.02.12
✎
08:20
|
(12) видимо сильно опытные раз для того что бы узнать разность дать поднимают объект запрос и подтягивают сервер - особенно в тонком клиенте актуально...
|
|||
14
DrShad
07.02.12
✎
08:20
|
(12) а я то и не знал!
|
|||
15
DrShad
07.02.12
✎
08:21
|
(12) чем то что в (6) лучше чем то что в (1)
|
|||
16
D_Pavel
07.02.12
✎
08:22
|
(13) И в чем твоя проблема? У меня всё работает.
|
|||
17
ZanderZ
07.02.12
✎
08:22
|
(16) молодец!
|
|||
18
Повелитель
07.02.12
✎
08:23
|
(12)
У вас в конторе платят за результат или за количество исходного текста? Это бы многое объяснило )) |
|||
19
andrewks
07.02.12
✎
08:23
|
эй, хватит спорить, горячие финские парни!
|
|||
20
D_Pavel
07.02.12
✎
08:24
|
(15) Это вопрос? Ничем не лучше, кроме того что в (1) возвращает не целое число. Можно использовать любой вариант, какой больше нравится. Я, например, (1) очень часто использую.
|
|||
21
DrShad
07.02.12
✎
08:25
|
(16) можно и на 1000 строк расписать и тоже будет работать
|
|||
22
D_Pavel
07.02.12
✎
08:25
|
(18) Текста там где нужно получается не так уж и много:
Результат = РазностьДат(Дата1,Дата2); |
|||
23
DrShad
07.02.12
✎
08:26
|
(22) тебе в (13) уже расписали что при этом происходит
|
|||
24
Повелитель
07.02.12
✎
08:26
|
(22) Не ну красивый метод, я не спорю, просто необычный
|
|||
25
D_Pavel
07.02.12
✎
08:27
|
(18) благо сейчас терабайтные винчестеры позволяют записать несколько лишних байт без заметного вреда.
|
|||
26
D_Pavel
07.02.12
✎
08:28
|
(23) Ага, расписали, сам вижу что ничего плохого. К чему ты это?
|
|||
27
andrewks
07.02.12
✎
08:29
|
(20) "кроме того что в (1) возвращает не целое число" сфигаль?
|
|||
28
SeraFim
07.02.12
✎
08:30
|
(12) вообще, всё зависит от контекста. Если нужно единоразово вычислить, то лучше (1) (с небольшим изменениев в виде НачалоДня())
Если нужно обработать большие объемы, то РазностьДат(&Дата1,&Дата2,День) нужно писать непосредственно в запросе. А так - посмотрел бы я на тебя, если б ты крутил (6) в запросе. Так что смысла от данной функции не вижу. |
|||
29
D_Pavel
07.02.12
✎
08:30
|
(27) бывает.
|
|||
30
SeraFim
07.02.12
✎
08:31
|
(27) зависит от того, что в датах. Если там "Дата и Время", то вполне может
|
|||
31
andrewks
07.02.12
✎
08:32
|
(29)(30) пример?
|
|||
32
ASU_Diamond
07.02.12
✎
08:32
|
а внимательно вопрос читали?
интересно как ТС собирается получить разность строк в днях? |
|||
33
D_Pavel
07.02.12
✎
08:33
|
(28) >>А так - посмотрел бы я на тебя, если б ты крутил (6) в запросе.
Она и так в запросе крутится. Там такая функция изначально есть, "с завода". |
|||
34
SeraFim
07.02.12
✎
08:34
|
(33) пардон, опечатался.
(28) читать так: "посмотрел бы я на тебя, если б ты крутил (6) в цикле." |
|||
35
D_Pavel
07.02.12
✎
08:35
|
(32) Там просто нужно отменить перевод в строку, и работать с датами.
|
|||
36
D_Pavel
07.02.12
✎
08:36
|
(34) Я бы так не делал. В циклах обычно разбирается результат запроса, а в запросе функция РазностьДат и так есть.
|
|||
37
andrewks
07.02.12
✎
08:39
|
+(31)ну что, пример будет?
|
|||
38
SeraFim
07.02.12
✎
08:40
|
(37) пожалуйста:
Дата1 = '2012-02-04 09:39:41'; Дата2 = '2012-02-02 00:00:00'; Сообщить((Дата1 - Дата2)/86400); //2,40255787037037037037037037 Сообщить((НачалоДня(Дата1) - НачалоДня(Дата2))/86400); //2 |
|||
39
D_Pavel
07.02.12
✎
08:40
|
(21) Это просто другой способ, довольно коротко написанный, а не увеличенный по размеру первый способ.
|
|||
40
LivingStar
07.02.12
✎
08:41
|
а вот интересный момент!!!
Дата1= 19.10.2011 0:00:00 Дата2= 17.10.2011 23:59:59 в резкльтате получается: (Дата1 - Дата2)/86400 = 1,000011574074074074074074074 в этом случае просто брать целую часть? или просто брать её всегда???! |
|||
41
andrewks
07.02.12
✎
08:43
|
(38) а, так вы про _результат_ в днях?
а я-то думал... :))) ну, функции округления ещё никто не отменял |
|||
42
LivingStar
07.02.12
✎
08:43
|
(40+) на начало дня то есть нужно брать просто
|
|||
43
andrewks
07.02.12
✎
08:48
|
(42) как тебе надо, так и бери. мы же не знаем твоей задачи. иногда и в дробных днях считать надо
|
|||
44
LivingStar
07.02.12
✎
09:08
|
кажется в этом методе есть проблема (Дата1 - Дата2) /86400
к примеру Дата1= 31.10.2011 0:00:00 Дата2= 28.10.2011 0:00:00 то результат будет 3, а нужно вообще ничего а почему то у меня РазностьДат() вообще процедура или функция с указанным именем не определена |
|||
45
LivingStar
07.02.12
✎
09:09
|
(44+) или с этим методом все правильно, он просто возвратил положительное значение (Дата1 - Дата2) /86400
|
|||
46
andrewks
07.02.12
✎
09:18
|
(44) "то результат будет 3, а нужно вообще ничего" О_о
|
|||
47
Aprobator
07.02.12
✎
09:26
|
до чего же некоторые люди не любят признавать свою неправоту.
|
|||
48
Ненавижу 1С
гуру
07.02.12
✎
09:27
|
(44) почему Ничего? и кстати, "Ничего" такого нет в 1С еще пока, вот есть Неопределено и NULL
|
|||
49
andrewks
07.02.12
✎
09:28
|
(48) да, Nothing очень нам не хватает...
|
|||
50
zelebobi4
07.02.12
✎
09:29
|
(44) А почему "ничего"??
|
|||
51
LivingStar
07.02.12
✎
09:34
|
(44) да просто мне нужно было в этом случае ничего не выводить в печатную форму
метод правильно работает!!!! возвратил положительное число! Скажите а почему у меня не работает функция РазностьДат() ? |
|||
52
LivingStar
07.02.12
✎
09:34
|
(51) то (50)
|
|||
53
Новиков
07.02.12
✎
09:52
|
...Велосипеды...велосипеды...
ОбщегоНазначения.РазобратьРазностьДат - ЗУП БухгалтерскийУчет.РазностьДатВДнях - БП ...и так далее и так далее и так далее... |
|||
54
vmv
07.02.12
✎
09:59
|
53. чушь, там только в днях - это просто, ты попробуй со временем также делать, причем не разово, а например использовать механизм для постороения периодических технологических периодов.
В производстве технологические периоды физической продолжительностью более суток, например смена начало 8:00 текущего дня и 8:00 часов следующего дня используется часто. Причем в этом технологическом периоде нужно снимать показания с приборов: по графику каждый час, каждые полчаса, каждые 10 минут. И таких графиков может быть произвольное количество. Параметры согласно графику пишуться в регистр сведений на датуиввремя снятия показаний так что ваща буха маягко говоря сосет в этой задаче |
|||
55
Stim
07.02.12
✎
10:00
|
(1) неверно. правильнее писать
(Дата1 - Дата2) /(60*60*24) |
|||
56
Новиков
07.02.12
✎
10:04
|
(54) читаю в (0): как можно получить разность 2х дат?.
Привожу примеры. Ты пишешь: "там только в днях " Вопрос к тебе. Читаем вопрос темы в (1)? как между ними (датами) получить разность в днях?. Ты пишешь: там только в днях". Ты в сознании? Причем тут кто у кого сосет? Ты читать умеешь? Или 22 см не вмещается в ширинке? |
|||
57
vmv
07.02.12
✎
10:08
|
(56) дата в себе несет и время с физической точки зрения, рассмотрение ее только в днях - упрощение для тьоток
|
|||
58
vmv
07.02.12
✎
10:10
|
да вечно в типовых понапихают кастрированые методы, ведь получить полную разность дат со временем вполне реально, не скажу как - сами думайте)
|
|||
59
LivingStar
21.02.12
✎
10:46
|
то что в (55) выдавало не тот результат, не зная как это применить, или вывести правильнее, использовал функцию типовой конфигурации УПП:
ОбщегоНазначения.РазобратьРазностьДат(НачалоДня(Рез.СрокПлатежа), НачалоДня(ОтборДатаКон), Лет, Месяцев, Дней); выдала она корректный результат.... |
|||
60
Ненавижу 1С
гуру
21.02.12
✎
10:56
|
(59) не прошло и месяца
|
|||
61
LivingStar
21.02.12
✎
11:01
|
(60) блин раз выдала второй раз не выдает уже ((((
|
|||
62
Ненавижу 1С
гуру
21.02.12
✎
11:02
|
(61) гыгы
|
|||
63
НЕА123
21.02.12
✎
11:02
|
(61)
это Ненавижу 1С сглазил. |
|||
64
LivingStar
21.02.12
✎
11:03
|
31.01.2011
31.12.2011 ОбщегоНазначения.РазобратьРазностьДат(НачалоДня(Рез.СрокПлатежа), НачалоДня(ОтборДатаКон), Лет, Месяцев, Дней); Дней = 0 (((( (НачалоДня(Рез.СрокПлатежа) - НачалоДня(ОтборДатаКон)) /(60*60*24) показывает -334 |
|||
65
LivingStar
21.02.12
✎
11:03
|
или что то я не то делаю?
|
|||
66
LivingStar
21.02.12
✎
11:04
|
да не все верно
нужно расчитать просрочку платеда вторая дата больше первой !!! |
|||
67
НЕА123
21.02.12
✎
11:04
|
(61)
вообще-то что ты хотел? сейчас Масленица, вот "блин" и, как положено, получился. |
|||
68
LivingStar
21.02.12
✎
11:05
|
ой, посмотрел код процедуры, тама передавать нужно их видимо в обратном порядке
|
|||
69
LivingStar
21.02.12
✎
11:08
|
вообще нужно вроде передавать именно в том в котором передаю....
|
|||
70
Aprobator
21.02.12
✎
11:09
|
(65) ты просто не тем занимаешься.
|
|||
71
Reset
21.02.12
✎
11:10
|
Хоспаде...
|
|||
72
LivingStar
21.02.12
✎
11:16
|
(70) в смысле чего не тем???
|
|||
73
hhhh
21.02.12
✎
11:42
|
(72) ну если отнять 31.01.2011 - 31.12.2011 должно получиться -334. Я проверил. Правильно у тебя считает. Непонятно, почему переживаешь.
|
|||
74
LivingStar
21.02.12
✎
11:43
|
(73) ясно типовая функция просто не считает такие даты, а эта считает...
|
|||
75
Fish
21.02.12
✎
11:46
|
(74) Типовая тоже считает, если код посмотреть :))))
|
|||
76
LivingStar
21.02.12
✎
11:50
|
(75) она вообще пропускает это так как первая дата меньше второй, процедура не выполняется, а если поменять даты то теряется суть
|
|||
77
Fish
21.02.12
✎
11:52
|
(76) Суть чего поменяется? Если ты из меньшего числа вычтешь бОльшее, то всегда получишь отрицательное число. Или ты математику в школе не учил? :)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |