Подсчет реального количества месяцев между датами, включая начало и конец месяца В одном проекте понадобилось подсчитывать полное количество месяцев между датами,
Допустим надо получить кол-во месяцев между датами 25.10.14 и 21.11.14
Функция РазницаДатВМесяцах ( Как вычислить разницу между двумя датами в месяцах ) вернет 1 , по сути разница между датами = одному месяцу,
но по факту работы будут в 10 и 11 месяцах, т.е. всего 2, в итоге была написана простая функция, ее код ниже:
Код 1C v 8.2 УП тДат= ДатаНачала; КолМес = 0 ;
Пока Месяц( тДат) < > Месяц( ДатаОкончания) Цикл
КолМес = КолМес+ 1 ;
тДат = ДобавитьМесяц( тДат, 1 ) ;
КонецЦикла ;
Результат = КолМес+ 1 ;
Категория:
Работа с Датами (Временем) Как получить количество ЛЕТ, МЕСЯЦЕВ, ДНЕЙ между датами? Нужно получить разницу между датами
31.12.2009 и
10.01.2005 и отобразить ее как:
4 года 11 месяцев 21 день
Код 1C v 8.х Процедура ТЕСТ_ВыполнитьНажатие(Кнопка)
ДатаНач = Дата( 2009 , 12 , 31 ) ;
ДатаКон = Дата( 2005 , 1 , 10 ) ;
Лет= 0 ; Мес= 0 ; Дн= 0 ;
РазобратьРазностьДат( ДатаНач, ДатаКон, Лет, Мес, Дн) ;
ЛетС = ФормаМножественногоЧисла( "год" , "года" , "лет" , Лет) ;
МесС = ФормаМножественногоЧисла( "месяц" , "месяца" , "месяцев" , Мес) ;
ДнС = ФормаМножественногоЧисла( "день" , "дня" , "дней" , Дн) ;
Сообщить( ? ( Лет> 0 , Строка( Лет) + " " + ЛетС, "" ) + " " + ? ( Мес> 0 , Строка( Мес) + " " + МесС, "" ) + " " + Строка( дн) + " " + ДнС) ;
КонецПроцедуры
Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0)
Лет = 0 ;
Месяцев = 0 ;
Дней = 0 ;
Если Дата1 > Дата2 Тогда
ВременнаяДата = Дата1 ;
Если День( ВременнаяДата) < День( Дата2 ) Тогда
Дней = ( ВременнаяДата - ДобавитьМесяц( ВременнаяДата, - 1 ) ) / 86400 ;
ВременнаяДата = ДобавитьМесяц( ВременнаяДата, - 1 ) ;
КонецЕсли ;
Если Месяц( ВременнаяДата) < Месяц( Дата2 ) Тогда
ВременнаяДата = ДобавитьМесяц( ВременнаяДата, - 12 ) ;
Месяцев = 12 ;
КонецЕсли ;
Лет = Макс( Год( ВременнаяДата) - Год( Дата2 ) , 0 ) ;
Месяцев = Макс( Месяцев + Месяц( ВременнаяДата) - Месяц( Дата2 ) , 0 ) ;
Дней = Макс( Дней + День( ВременнаяДата) - День( Дата2 ) , 0 ) ;
Если Дата2 < > ( ДобавитьМесяц( Дата1 , - Лет * 12 - Месяцев) - Дней * 86400 ) Тогда
Дней = Дней + ( День( КонецМесяца( Дата2 ) ) - День( НачалоМесяца( Дата2 ) ) ) - ( День( КонецМесяца( ДобавитьМесяц( Дата1 , - 1 ) ) ) - День( НачалоМесяца( ДобавитьМесяц( Дата1 , - 1 ) ) ) ) ;
КонецЕсли ;
КонецЕсли ;
КонецПроцедуры
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло)
Если ЦелоеЧисло < 0 Тогда
ЦелоеЧисло = - 1 * ЦелоеЧисло;
КонецЕсли ;
Если ЦелоеЧисло < > Цел( ЦелоеЧисло) Тогда
Возврат Слово2 ;
КонецЕсли ;
Остаток = ЦелоеЧисло%10 ;
Если ( ЦелоеЧисло > 10 ) И ( ЦелоеЧисло< 20 ) Тогда
Возврат Слово3 ;
ИначеЕсли Остаток= 1 Тогда
Возврат Слово1 ;
ИначеЕсли ( Остаток> 1 ) И ( Остаток< 5 ) Тогда
Возврат Слово2 ;
Иначе
Возврат Слово3 ;
КонецЕсли ;
КонецФункции
Категория:
Работа с Датами (Временем) Функция ПредставлениеПериода() аналог 7-ной функции ПериодСтр() Функция позволяет формировать описание периода, заданного датами начала и окончания на одном из языков, поддерживаемых платформой. Например, в результате выполнения следующего кода:
Код 1C v 8.2 УП ТекДата = ТекущаяДата( ) ;
НачПериода = НачалоМесяца( ТекДата) ;
КонПериода = КонецМесяца( ТекДата) ;
Сообщение = Новый СообщениеПользователю;
Сообщение. Текст = ПредставлениеПериода( НачПериода, КонПериода, "L=en_US" ) ;
Сообщение. Текст = ПредставлениеПериода( НачПериода, КонПериода, "L=ru_RU" ) ;
Сообщение. Сообщить( ) ;
будет получено представление периода на английском или русском языках!
Функция глобального контекста
ПредставлениеПериода() позволяет получить строковое представление периода, заданного датами начала и окончания.
Например:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050101235959 ')
ПредставлениеПериода( '20050101000000 ', '20050131235959 ')
ПредставлениеПериода( '20050101000000 ', '20050228235959 ')
Кроме стандартных периодов эта функция позволяет получать представления так называемых финансовых периодов: первых девяти месяцев года и первого полугодия. Для этого используется форматная строка с указанием признака ФП:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050630235959 ', "ФП = Истина" )
ПредставлениеПериода( '20050101000000 ', '20050930235959 ', "ФП = Истина" )
Кроме этого форматная строка позволяет получать представление периода на языке, отличном от используемого по-умолчанию:
Код 1C v 8.х ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = en_US" )
ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = bg_BG" )
ПредставлениеПериода( '20050101000000 ', '20050331235959 ', "L = de_DE" )
Категория:
Работа с Датами (Временем)