Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| РАЗНОСТЬДАТ(&Дата1, &Дата2, МЕСЯЦ) КАК РезультатРазность";
Запрос.УстановитьПараметр("Дата1",СтрТЧ.ДатаНачала);
Запрос.УстановитьПараметр("Дата2",СтрТЧ.ДатаОкончания);
Результат = Запрос.Выполнить().Выгрузить();
КолвоМесяцев = Результат[0].РезультатРазность+1;
Классика жанра. Ходим на сервер, чтобы посчитать разность дат. Ну да, сервер же у нас целыми днями воздух гоняет, заняться ему больше нечем. Давайте 2+2 складывать начнем через сервак.
Причем, б*ть, через сервер приложений, который в свою очередь погонит запрос на сервер MSSQL.
Разность дат в месяцах, причем с игнорированием дня и времени, (т. е. между 31.01.16 23:59:59 и 01.02.16 0:00:00 будет разность 1 месяц, так же как и между 01.01.16 и 29.02.16),
считается элементарно:
КолвоМесяцев = Месяц(ДатаОкончания) - Месяц(ДатаНачала) + 12 * (Год(ДатаОкончания) - Год(ДатаНачала))
Вы будете смеятся, но я раз такое в продакшене видел: это был воркараунд для обработки leap year & DST. потому что в приложении (С++) этого не могли сделать.
в одной прикладухе народ говорил это тоже делали - пока не появился важный кастомер в алжире. они обслуживают на севере африки страны в четырех часовых поясях. на установку часового пояса в локальных офисах полагатся нельзя - поэтому им пришлось аппликуху на локальное время пересаживать, и все сторед просиджес/этц соответственно переписиывать.
вы оба так говорите, будто в этом есть что-то плохое
если на клиенте в принципе нельзя полагаться, что там будет ntp, то время сервера - единственная вещь, с которой можно жить
у нас есть пара систем, где число клиентов тысячами считается
вот все они, к сожалению, при старте и далее регулярно в течение дня спрашивают сервер о реальном времени и ведут свои виртуальные часы (основанные на разнице серверного времени и системного), потому что иначе никак
или ты имеешь в виду, что пользователь вне клиента может переставить системные часы?
может, это повод перезапросить серверное время ещё раз и уточнить новую разницу
Осталось понять, когда перезапрашивать. А так как летнее время имеет тенденцию внезапно меняться в разных странах, придётся тянуть зависимость от tzdata.
> когда перезапрашивать
Никогда*. Просто надо просить у операционки значение монотонно растущего счётчика, а не время 😉 Ну или UTC, но его могут руками облапать.
*изредка, например раз в день, чтобы дрейф часов компенсировать
> монотонно растущего счётчика
хитрый какой
когда клиент на js, это всё становится уже не так тривиально
> когда перезапрашивать
когда локальное время внезапно не согласуется с ожиданиями, каким оно всё ещё должно быть с точки зрения клиента
как я уже писал, мне тут повезло, плюс минус несколько секунд никого не обломают - для задач хватает (часы в юзеринтерфейсе, слежение за расписанием работы в минутах), распространение серверного времени через http rest уже навлекает на себя приличную погрешность + таймеры в js сами по себе неточные (особенно, когда таб неактивный)
> который в свою очередь погонит запрос на сервер MSSQL.
а ты проверял профайлером, что действительно погонит на sql?
тут нет обращения к таблицам данных
что делает эта функция?
считается элементарно:
КолвоМесяцев = Месяц(ДатаОкончания) - Месяц(ДатаНачала) + 12 * (Год(ДатаОкончания) - Год(ДатаНачала))
Не бойся, без хуев на пол экрана
ЗЫ никто "шутки" не уловил. "РАЗНОСДАТЬ" это то как я прочитал "РАЗНОСТЬДАТ".
Вы будете смеятся, но я раз такое в продакшене видел: это был воркараунд для обработки leap year & DST. потому что в приложении (С++) этого не могли сделать.
если на клиенте в принципе нельзя полагаться, что там будет ntp, то время сервера - единственная вещь, с которой можно жить
у нас есть пара систем, где число клиентов тысячами считается
вот все они, к сожалению, при старте и далее регулярно в течение дня спрашивают сервер о реальном времени и ведут свои виртуальные часы (основанные на разнице серверного времени и системного), потому что иначе никак
или ты имеешь в виду, что пользователь вне клиента может переставить системные часы?
может, это повод перезапросить серверное время ещё раз и уточнить новую разницу
Никогда*. Просто надо просить у операционки значение монотонно растущего счётчика, а не время 😉 Ну или UTC, но его могут руками облапать.
*изредка, например раз в день, чтобы дрейф часов компенсировать
хитрый какой
когда клиент на js, это всё становится уже не так тривиально
> когда перезапрашивать
когда локальное время внезапно не согласуется с ожиданиями, каким оно всё ещё должно быть с точки зрения клиента
как я уже писал, мне тут повезло, плюс минус несколько секунд никого не обломают - для задач хватает (часы в юзеринтерфейсе, слежение за расписанием работы в минутах), распространение серверного времени через http rest уже навлекает на себя приличную погрешность + таймеры в js сами по себе неточные (особенно, когда таб неактивный)
Это титановый костыль, который через пару месяцев станет несъемным протезом
а ты проверял профайлером, что действительно погонит на sql?
тут нет обращения к таблицам данных
это ты обезьяна