Аватар для xxx_73
-2 / 4 / 1
Регистрация: 06.01.2014
Сообщений: 462

Рассчитываем разность дат от текущей даты

03.05.2018, 08:19. Показов 26168. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть текущая дата, и есть дата рождения в реквизите(дата регистрации). Нужно в табличную чать поместить результат в (год, месяц, дней).
1C
1
2
НачалоДняТекущейДаты = НачалоДня(ТекущаяДата()); 
ДатаРож=НачалоДняТекущейДаты-Объект.Дата;
Синтаксической ошибки нет, но наверно арифметические действия нельзя напрямую с Объектом совершать? Поможете разобраться и разъяснит по соседски?
Миниатюры
Рассчитываем разность дат от текущей даты  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2018, 08:19
Ответы с готовыми решениями:

Запрос (Разность дат)
1С Предприятие 8.2 Хочу при запуске системы вывести сообщение Разницы дней между двумя любыми датами 1) В событии Управляемого...

Разность рабочих дат в запросе
Всем привет!) Делаю запрос для вычисления разности между рабочими датами. ВЫБРАТЬ Док.Ссылка, ...

Запрос в 1С: разность дат в условии ГДЕ
есть след запрос: ВЫБРАТЬ РеализацияТоваровУслуг.Контрагент, -РАЗНОСТЬДАТ(&ДатаОтчета,...

38
Модератор
Эксперт 1С
 Аватар для Yulunga
4775 / 970 / 270
Регистрация: 22.04.2013
Сообщений: 6,657
Записей в блоге: 1
13.10.2024, 23:01
Лучший ответ Сообщение было отмечено xxx_73 как решение

Решение

Студворк — интернет-сервис помощи студентам
Maks, ты имеешь в виду
1C
1
2
3
сообщение = новый сообщениепользователю;
сообщение.текст = "персонажу " + лет + " лет, " + месяцев + " месяцев, " + дней + " дней.";
сообщение.сообщить();
?
2
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 08:26
Лет = Год(Объект.ДатаСегодня)-Год(Объект.ДатаРождения);
Месяцев = Месяц(Объект.ДатаСегодня)-Месяц(Объект.ДатаРождения);
Дней = День(Объект.ДатаСегодня)-День(Объект.ДатаРождения);
Если Дней < 0 Тогда
Месяцев = Месяцев - 1;
Дней = (КонецМесяца(Объект.ДатаСегодня)+1 - НачалоМесяца(Объект.ДатаСегодня))/86400 + Дней;
КонецЕсли;
Если Месяцев < 0 Тогда
Лет = Лет - 1;
Месяцев = 12 + Месяцев;
КонецЕсли;
Будет ли работать данный алгоритм в обратном порядке?
Т.е., если изменить условие наоборот, поменять местами "Объект.ДатаСегодня" и "Объект.ДатаРождения"?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 09:10
не будет. но если в начале проверить какая из дат меньше и навести порядок то будет )
0
Эксперт 1С
7179 / 1781 / 649
Регистрация: 16.01.2015
Сообщений: 7,355
14.10.2024, 09:27
увидел, что уже ответили
0
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 10:03
Цитата Сообщение от Аватар Посмотреть сообщение
но если в начале проверить какая из дат меньше и навести порядок то будет
В начале при установке переменных, или в условии?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 10:50
сделал бы функцию, две даты в параметрах дата1 и дата2
две переменных: датаменьшая и датабольшая
в начале
датаменьшая = ?(дата1 < дата2, дата1, дата2);
датабольшая = ?(дата1 < дата2, дата2, дата1);
и дальше все Объект.ДатаРождения заменить на датаменьшая,
а Объект.ДатаСегодня на датабольшая )
результат можно структурой оформить, или строкой
1
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 11:05
Цитата Сообщение от Аватар Посмотреть сообщение
дата1 < дата2
Я так понимаю Дата1=ТекущаяДата?
Цитата Сообщение от Аватар Посмотреть сообщение
результат можно структурой оформить, или строкой
Строкой типа Сообщить();?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 11:16
Цитата Сообщение от Maks Посмотреть сообщение
Я так понимаю Дата1=ТекущаяДата?
не важно, функция сама разберется где большая
Цитата Сообщение от Maks Посмотреть сообщение
Строкой типа Сообщить();?
как Yulunga выше предложил или свою красоту навести, я бы структурой где года, месяцы, дни и строкой, иногда же важно сколько полных лет.
1
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 11:21
Аватар, если я правильно понял, то сначала нужно написать функцию, а уже потом процедуру? Последняя поймет куда ей обратиться за Дата1 и Дата2?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 11:26
об процедуре речи же не было, предлагалось оформить код от polax функцией. можно конечно и процедурой при желании, только результат тогда в параметрах процедуры
1
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 11:34
Аватар, необходимо создать команду на общей форме. При создании в поле "Действие" создается именно процедура. Ее можно заменить на функцию? Или функцию создать отдельно, а в процедуре указать ее выполнение?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 11:37
Цитата Сообщение от Maks Посмотреть сообщение
Или функцию создать отдельно, а в процедуре указать ее выполнение?
ну да
0
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 11:47
Аватар, правильно ли я собрал функцию?
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
датаменьшая = ?(дата1 < дата2, дата1, дата2);
датабольшая = ?(дата1 < дата2, дата2, дата1);
Лет = Год(датабольшая)-Год(датаменьшая);
Месяцев = Месяц(датабольшая)-Месяц(датаменьшая);
Дней = День()-День(датаменьшая);
Если Дней < 0 Тогда
Месяцев = Месяцев - 1;
Дней = (КонецМесяца(датабольшая)+1 - НачалоМесяца(датабольшая))/86400 + Дней;
КонецЕсли;
Если Месяцев < 0 Тогда
Лет = Лет - 1;
Месяцев = 12 + Месяцев;
КонецЕсли;
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 12:24
Лучший ответ Сообщение было отмечено Maks как решение

Решение

1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
функция РазностьДат(дата1, дата2)
    датаменьшая = ?(дата1 < дата2, дата1, дата2);
    датабольшая = ?(дата1 < дата2, дата2, дата1);
    Лет = Год(датабольшая)-Год(датаменьшая);
    Месяцев = Месяц(датабольшая)-Месяц(датаменьшая);
    Дней = День(датабольшая)-День(датаменьшая);
    Если Дней < 0 Тогда
        Месяцев = Месяцев - 1;
        Дней = (КонецМесяца(датабольшая)+1 - НачалоМесяца(датабольшая))/86400 + Дней;
    КонецЕсли;
    Если Месяцев < 0 Тогда
        Лет = Лет - 1;
        Месяцев = 12 + Месяцев;
    КонецЕсли;
    результат = "персонажу " + Лет + " лет, " + Месяцев + " месяцев, " + Дней + " дней.";
Конецфункции
1
Модератор
Эксперт 1С
 Аватар для Yulunga
4775 / 970 / 270
Регистрация: 22.04.2013
Сообщений: 6,657
Записей в блоге: 1
14.10.2024, 13:01
Аватар, сравним 31.1.24 и 29.2.24
лет = 0
м = 1
д = 29-31=-2
д меньше нуля следовательно
м = 0
д = (1.3.24 - 1.2.24)/86400 -2. уменьшаемое, видимо, равно 29. поэтому д = 29-2 = 27
итого персонажу 0 л 0 м и 27 дней
правильно я посчитал?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 13:14
да там всегда тонкости с февралем, когда то давно в фоксе мучался с этим, а мне к сожалению проверить не чем, 1с не стоит, фокс забыл почти, а корячиться в excel нет ни какого желания. а код не от меня, от polax-а
0
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 14:17
Yulunga, на счет февраля выше уже написано:
Цитата Сообщение от polax Посмотреть сообщение
Моменты с високосным годом абсолютно не влияют. Месяц и Год программа сама определит, без разницы сколько дней в феврале. А дней, если запрос будет в феврале, НачалоМечяца и КонецМесяца сами определят сколько дней
Остается проверить на практике, например, задав точные значения (даты) для переменных.
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
14.10.2024, 21:43
там в #34 забыл возврат результата сделать, вот что значит практика давно отсутствует )
1
Супер-модератор
Эксперт 1СЭксперт по компьютерным сетямЭксперт HardwareЭксперт Windows
 Аватар для Maks
9760 / 5654 / 652
Регистрация: 13.03.2013
Сообщений: 19,375
Записей в блоге: 68
14.10.2024, 21:45
Цитата Сообщение от Аватар Посмотреть сообщение
там в #34 забыл возврат результата сделать, вот что значит практика давно отсутствует
Тут, главное, база остальное думающий в направлении по сабжу человек сам допишет, для иных данный топик не предназначен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.10.2024, 21:45

Сравнение текущей даты с диапазоном дат
Здравствуйте! Подскажите пожалуйста. Как можно реализовать сравнение текущей даты с определенным диапазоном дат? Например, сегодня 27...

Определение количества дат в столбце в зависимости от текущей даты
Доброго времени суток! У меня возникла следующая проблема при написании формулы. В общем есть файл excel &quot;А&quot; и файл excel...

Выборка данных через сравнение даты в DataGridView и текущей даты
Ситуация такова: в датагриде есть столбец с определенной датой. Нужно сравнить все даты с этого столбца с датой, задаваемой...

Добавление текущей даты к имени файла при нестандартном формате вывода даты
Приветствую ! Давно и успешно используется код, который мне когда-то подсказали тут на форуме set count=1 set...

На основе введенной даты рождения и текущей даты сообщить пользователю, сколько он прожил дней
3. Написать программу, которая на основе введенной даты рождения и текущей даты сообщает пользователю, сколько он прожил дней. Принять во...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru