Функция для вычисления разницы между двумя датами

Функция РазностьДат

Простая функция для вычисления разности между датами в любых единицах.

От типовой отличается тем, что реализована функцией языка запросов РАЗНОСТЬДАТ.

В приложении — обработка, демонстрирующая работу функции.

59 Comments

  1. Tahallus

    Я вижу Вы открыли для себя РАЗНОСТЬДАТ

    Reply
  2. AnryMc

    Долго думал. Ставить или нет «-«. У человека всего 3 звездочки (уже 2). И решил, что будет — 1.

    Reply
  3. straus

    http://govnokod.ru/12749

    не ожидал на инфостате

    Reply
  4. yuraos

    Как много нам (1) открытий чудных,

    готовит мануала дух!

    И опыт — сын багов (ударение на первый слог) трудных,

    И гений — алгоритмов друг!




    ааасторожно надо мануал 1с-ный публиковать.

    сначала надо группой поддержки заручиться…

    …которая восторженно ох-ахает и

    плусует-плусует-плусует!!!

    🙂

    Reply
  5. yuraos

    (1)

    похоже разработчики платформы,

    которые лепили встроенные функции и те

    которые реализовывали функционал запросов

    друг о друге ничего не знали.



    иначе бы, наверное, была встроенная функция РАЗНОСТЬДАТ()

    и не было бы повода для такой статьи

    🙂

    Reply
  6. yuraos

    Tahallus,

    к стати поздравляю!

    Инфостарт рассылает спам что ты автор этой публикации

    🙂

    Смотри скриншот.

    Reply
  7. AnryMc

    (6) yuraos, Точно. И мне тоже ;-)))

    Reply
  8. andrewks

    (6) yuraos, в письмах, которые приходят мне, с некоторых пор не только автор, но и название не отображается.

    Тема: «Инфостарт — Новый комментарий»

    и так — для любой ветки

    Reply
  9. yuraos

    (8) andrewks,

    Любопытно скрипты работают на Инфорстарте…

    А ты через какой браузер ходишь по Инфостарту ???

    Я через Оперу и его почтовый клиент юзаю.

    Reply
  10. andrewks

    (9) yuraos, у меня The Bat!. но это, собственно, не важно, ибо в исходнике письма Subject приходит именно такой, проверял.

    раньше было нормально, слетело после падения/переезда на новый сервер

    Reply
  11. yuraos

    (10) andrewks,

    в самом деле от браузера (и тем более от клиента)

    вроде не должна рассылка зависеть…


    слетело после падения/переезда на новый сервер

    имеешь ввиду, когда Инфостарт начал глючить не по децки,

    а потом совсем накрылся медным тазом

    и после чего они развернули бэкап (уж не знаю на каком серваке — новом или старом) ???

    Reply
  12. WKBAPKA

    ну для кого то это и открытие… хотя 1С могла бы сделать функцию, как бэ не сложно

    Reply
  13. WKBAPKA

    куку .. РАЗНОСТЬДАТ реализовано в запросах, а чел выложил расчет разницы в датах не в запросе (обработку не качал, так что предполагаю)… в языке 8-ки это, как в 7.7. не реализовано, так что зря вы нападаете на начинающего программиста… т.к. я вредный, поставлю плюс, поддержу молодежь!

    Reply
  14. AnryMc

    (6) yuraos, Самое интересное, что из одних веток письма приходят правильно…

    Reply
  15. AnryMc

    (13) WKBAPKA,

    Да ещё в разных единицах измерения.

    Ты меня почти убедил. Нетрализую свой «-«.

    Reply
  16. smaharbA

    (13) не поверите — в 77 реализовано в одно действие

    Reply
  17. AnryMc

    (16) smaharbA,

    7.7 Forever!

    😉

    Reply
  18. andrewks

    (13) WKBAPKA, реализуется в одну строку: (Макс(Дата1,Дата2)-Мин(Дата1,Дата2))/СекундВЕдинице

    я понимаю, что РАЗНОСТЬДАТ в запросе — это круто и гламурно, но дёргать из-за этих мелочей сервер явно чрезмерно. а если уж эта функция окажется в цикле с кол-вом итераций, например, 10000, так и вообще вредно

    Reply
  19. andrewks

    (16) как насчёт секунд/минут/часов?

    Reply
  20. andrewks

    я не вредный, плюс ставить не буду, минус тоже

    Reply
  21. yuraos
    Reply
  22. yuraos

    (21)(18) andrewks,

    Хотя говорят в платформе 8.2.17 добавили функцию,

    позволяющую время в миллисекундах отмерять…

    мож они и эти функции наконец добавили ???

    а то стремно и позорно как-то…сервер напрягать для посчета смещенной даты.

    Reply
  23. WKBAPKA

    какой кошмар? а мне то зачем?

    Reply
  24. andrewks

    (23) WKBAPKA, берите, пока дают ))

    Reply
  25. yuraos

    (23) WKBAPKA,

    да так … за компанию.

    извини если что.

    Reply
  26. andrewks

    (22) yuraos, а смысл добавлять? лично я не вижу. если хронометр с миллисекундами может быть очень полезен, то тут всё реализуется примитивными арифметическими операциями

    Reply
  27. smaharbA

    (26) ну положим в толстом миллисекунды реализуются штатно

    Reply
  28. andrewks

    (27) smaharbA, и как?

    Reply
  29. smaharbA

    (27) для толстого

    Перем Скрыпт;
    Процедура ДокументСформирован(Поле)
    Скрыпт=Поле.Документ.Script;
    КонецПроцедуры
    
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Пока Истина Цикл
    Попытка
    Скрыпт.ДатаМиллисекондов();
    Прервать;
    Исключение
    КонецПопытки;
    КонецЦикла;
    Сообщить(Скрыпт.ДатаМиллисекондов(0));
    Предупреждение(1,10);
    Сообщить(Скрыпт.ДатаМиллисекондов(0));
    КонецПроцедуры
    
    Процедура ПриОткрытии()
    ПолеHTMLДокумента=ЭлементыФормы.Найти(«ПолеHTMLДокумента»);
    Если ПолеHTMLДокумента=Неопределено Тогда
    ПолеHTMLДокумента=ЭлементыФормы.Добавить(Тип(«ПолеHTMLДокумента»),»ПолеHTMLДокумента»);
    КонецЕсли;
    ПолеHTMLДокумента.УстановитьТекст(«<script type=’text/javascript’>ДатаМиллисекондов=function(){return (new Date().getTime())}</script>»);
    ПолеHTMLДокумента.УстановитьДействие(«ДокументСформирован»,Новый Действие(«ДокументСформирован»));
    КонецПроцедуры
    

    Показать

    Reply
  30. AnryMc

    (29) smaharbA,

    Вызвало некоторый ступор

    Перем Скрыпт

    — это от какого корня?

    Reply
  31. andrewks

    (29) smaharbA, что-то мне кажется, что при вызове браузера со скриптом миллисекунды уже не будут интересны ))

    Reply
  32. andrewks

    (29) smaharbA, интересно а в 8.3 под линукс будет это работать? надо будет опробовать

    Reply
  33. AnryMc

    (29) smaharbA,

    ну положим в толстом миллисекунды реализуются штатно

    — это что? Штатно?

    Reply
  34. andrewks

    (33) AnryMc, формально — штатно. а то, что там прячется вражий браузер — это за кадром 🙂

    Reply
  35. AlexO

    (29) smaharbA,

    и где тут штатная реализация средствами 1С?

    (22) yuraos,

    да, это ТекущаяУниверсальнаяДатаВМиллисекундах

    Reply
  36. AlexO

    (0) автор, форма сделана красиво, но какой смысл заложен запросом складыватьвычитать даты?

    Показать пример использования РАЗНОСТЬДАТ?

    Reply
  37. AlexO

    (1)(24) andrewks,

    точно, а то потом знания будут утеряны 🙂

    Reply
  38. AlexO

    Нет, ну согласитесь — форма-то красива, как в 7.7 практически 🙂

    Reply
  39. yuraos

    (29) smaharbA,

    а во эта и для ТОЛСТОГО и для НЕ-ТОЛСТОГО…

    лишь бы Винда была, да ОДМИНЫ с правами чей-нибудь не нарулили

    😉

    // Функция, возвращающая время в миллисекундах или секундах.
    //
    &НаКлиентеНаСервереБезКонтекста
    Функция ВремяВМиллисекундах()
    Попытка
    Script = Новый COMОбъект(«MSScriptControl.ScriptControl»);
    Script.Language = «javascript»;
    Script.Timeout   = -1;
    Время = Script.Eval(«var d = new Date(); d.getTime()»);
    Исключение
    Время = ТекущаяДата();
    КонецПопытки;
    
    Возврат Время;
    КонецФункции
    
    // Пример.
    //
    Процедура ПримерИспользования()
    
    Начало = ВремяВМиллисекундах();
    КоличествоСтрок = 0;
    Для Каждого Элемент ИЗ Массив Цикл
    КоличествоСтрок = КоличествоСтрок  + 1;
    …
    КонецЦикла;
    Конец  = ВремяВМиллисекундах();
    
    ВремяВыполнения = (Конец — Начало) / 1000;
    
    РезультСтрока = НСтр(«ru = ‘Результат процесса (количество строк = %КоличествоСтрок%, время выполнения = %ВремяВыполнения% с)'»);
    РезультСтрока = СтрЗаменить(РезультСтрока, «%КоличествоСтрок%», Строка(КоличествоСтрок));
    РезультСтрока = СтрЗаменить(РезультСтрока, «%ВремяВыполнения%», Строка(ВремяВыполнения));
    
    КонецПроцедуры
    
    

    Показать

    Любезно предоставил уважаемый StepByStep

    в своей публикации

    Reply
  40. yuraos

    (39)

    к стати о птичках…

    через COMОбъект(«MSScriptControl.ScriptControl»)

    можно все остальные функции для работы с датами реализовать

    без 1С-ного запроса и следовательно не напрягая сервер.

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

    Reply
  41. PiccaHut001

    шедевральная вещь.

    Reply
  42. PiccaHut001

    Давно мечтал о таком, теперь буду даты складывать.Автору респект.

    Reply
  43. yuraos

    (26) andrewks,

    возможно ты прав…

    … хоть и не всегда действия элементарны.

    Например год когда 365 дней, когда 366.

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

    но ведь в других средах программирования

    делают зачем-то встроенные аналоги функций вроде

    РазностьДат() и ДобавитьКДате()

    и в языке запросов их 1С тоже сделала.


    Если на небе зажигаются звезды, значит это кому-то надо…
    Reply
  44. yuraos

    (35) AlexO,

    ммммм…это комментарий от соседней функции залез в буфер

    🙂

    а примерная реализация как в этом посте (39)

    Reply
  45. yuraos

    ГОСПОДА!

    А КУДА ПОДЕВАЛСЯ АВТОР СТАТЬИ (уважаемый vsuh) ???

    Хоть бы один пост оставил.

    🙂

    В личку что ли писать благодарности

    за приятное общение на этой ветке ???

    Reply
  46. AlexO

    (45) yuraos,

    Ушел писать обработки по ДОБАВИТЬКДАТЕ, найти запросом МАКСИМУМ и МИНИМУМ 🙂

    Reply
  47. Поручик

    (45) Автор пошёл дальше читать Габеца и Гончарова — Простые примеры разработки.

    Reply
  48. andrewks

    (40) yuraos, в то время, когда космические корабли бороздят просторы Вселенной грядёт стабильная 8.3, нужно использовать более универсальные механизмы, которые будут работать и на Win и на Lin.

    поэтому я считаю, что +-*/ — наше всё. если лень вспоминать, сколько секунд в часе — можно накатать пару-тройку функций, чтобы потом их использовать

    Reply
  49. Степанова Н.

    Для чего это вообще нужно

    Reply
  50. yuraos

    (48) andrewks,

    стабильная 1С-ка говоришь???

    вот щастье то какое!!!



    но боюсь я до этого не доживу.

    ;)))

    Reply
  51. yuraos

    (49) Степанова Н.,

    да так, особо не для чего.



    так поболтать-почирикать.

    😉

    Reply
  52. yuraos

    (48) andrewks,

    а насчет универсальности,

    пожалуй,

    с тобой соглашусь.

    Reply
  53. andrewks

    (50) yuraos, будущее уже близко ))

    Reply
  54. AlexO

    (53) andrewks,

    грядёт стабильная 8.3,

    будущее уже близко ))

    вашими планами — да мед пить 1с разрабатывать :))

    Reply
  55. yuraos

    (54) AlexO,

    интересно есть ли у кого статистика

    по среднему количеству количеству выявленных багов допустим

    за месяц или за год эксплуатации

    по всем платформам для сравнения

    8.0

    8.1

    8.2

    ну и для новоявленного чуда-юда

    8.3

    ???

    Reply
  56. andrewks

    (54) AlexO, планы не мои 🙂 я только разместил объяву ©

    Reply
  57. alexin08

    А для кадровика этот калькулятор очень даже интересен!

    Reply
  58. chmv

    Не уверенна

    Reply
  59. Vovan58

    Как статью по поводу работы с датами — было бы интересно, а за деньги — стыдно!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *