Сделано на базе http://help1c.com/faq/view/679.html
Я добавил часы, минуты и секунды.
Функция РазностьДатПрописью(Дата1, Дата2)
Лет = 0; Мес = 0; Дн = 0;
Часов = 0; Минут = 0; Секунд = 0;
РазобратьРазностьДат(Дата1, Дата2, Лет, Мес, Дн, Часов, Минут, Секунд);
ЛетС = ФормаМножественногоЧисла("год","года","лет",Лет);
МесС = ФормаМножественногоЧисла("месяц","месяца","месяцев",Мес);
ДнС = ФормаМножественногоЧисла("день","дня","дней",Дн);
ЧасовС = ФормаМножественногоЧисла("час","часа","часов", Часов);
МинутС = ФормаМножественногоЧисла("минута","минуты","минут", Минут);
СекундС = ФормаМножественногоЧисла("секунда","секунды", "секунд", Секунд);
Рез =
?(Лет > 0, Строка(Лет) + " " + ЛетС, "") + " " +
?(Мес > 0, Строка(Мес) + " " + МесС, "") + " " +
?(Дн > 0, Строка(Дн) + " " + ДнС, "") + " " +
?(Часов > 0, Строка(Часов) + " " + ЧасовС, "") + " " +
?(Минут > 0, Строка(Минут) + " " + МинутС, "") + " " +
?(Секунд > 0, Строка(Секунд) + " " + СекундС, "");
Возврат Рез;
КонецФункции
// Назначение: Получить разность дат.
// Данные разности возвращаются в переменные Лет, Мес, Дн, Часов, Минут, Секунд.
// Порядок дат не имеет значения.
Процедура РазобратьРазностьДат(ПолнаяДата1, ПолнаяДата2, Лет = 0, Месяцев = 0, Дней = 0, Часов = 0, Минут = 0, Секунд = 0)
Лет = 0;
Месяцев = 0;
Дней = 0;
Дата1 = Макс(НачалоДня(ПолнаяДата1), НачалоДня(ПолнаяДата2));
Дата2 = Мин(НачалоДня(ПолнаяДата1), НачалоДня(ПолнаяДата2));
Если Дата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), Месяц(ПолнаяДата2), День(ПолнаяДата2), Час(ПолнаяДата1), Минута(ПолнаяДата1), Секунда(ПолнаяДата1));
Дата2 = ПолнаяДата2;
Разность = Макс(Дата1, Дата2) - Мин(Дата1, Дата2);
Часов = Цел(Разность / 3600);
Минут = Цел( (Разность - Часов * 3600) / 60 );
Секунд = Окр( ( (Разность - Часов * 3600) / 60 - Минут ) * 60, 2);
КонецПроцедуры
// Сформировать множественное число
Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло)
// Изменим знак целого числа, иначе отрицательные числа будут неправильно преобразовываться
Если ЦелоеЧисло < 0 Тогда
ЦелоеЧисло = -1 * ЦелоеЧисло;
КонецЕсли;
Если ЦелоеЧисло <> Цел(ЦелоеЧисло) Тогда // для нецелых чисел - всегда вторая форма
Возврат Слово2;
КонецЕсли;
// остаток
Остаток = ЦелоеЧисло % 10;
Если (ЦелоеЧисло > 10) И (ЦелоеЧисло < 20) Тогда
// для второго десятка - всегда третья форма
Возврат Слово3;
ИначеЕсли Остаток = 1 Тогда
Возврат Слово1;
ИначеЕсли (Остаток > 1) И (Остаток < 5) Тогда
Возврат Слово2;
Иначе
Возврат Слово3;
КонецЕсли;
КонецФункции
Пример использования:
Сообщить(РазностьДатПрописью(Дата(2009, 12, 31), ТекущаяДата()));
Порядок указания дат не имеет значения.