Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.02.2012, 19:06   #1
man_of_virtue
Пользователь
 
Аватар для man_of_virtue
 
Регистрация: 17.09.2011
Сообщений: 10
По умолчанию Преобразование даты

Доброго времени суток, уважаемые! Пожалуйста, направьте меня в нужное русло. Суть вот в чем: имеются два DateTimePicker-а. По задумке пользователь вводит (выбирает) с их помощью две даты (условно: "начало" и "конец". Дальше, по нажатию кнопки, даты вычитаются (с этим проблем нет) и пользователю (а вот дальше пошли проблемы) должна возвращаться информация типа: "Вы прожили на свете dd дней, mm месяцев, yyyy лет". Но как бы я не бился - возвращаются только либо количество дней, либо лет, либо кварталов (ну и т.д.) В связи с этим вопрос, есть-ли какой-либо метод, который позволял бы преобразовывать полученное количество дней в приведенный выше желаемый формат с учетом високосности и прочей календарной приблуды (тридцать дней или тридцать один, к примеру...)? Заранее спасибо.
man_of_virtue вне форума Ответить с цитированием
Старый 21.02.2012, 19:39   #2
Volodshan
Форумчанин
 
Регистрация: 20.05.2008
Сообщений: 241
По умолчанию

Цитата:
Сообщение от man_of_virtue Посмотреть сообщение
... должна возвращаться информация типа: "Вы прожили на свете dd дней, mm месяцев, yyyy лет". Но как бы я не бился - возвращаются только либо количество дней, либо лет, либо кварталов (ну и т.д.)...
Покажите своё "битьё" - может подправим.
Volodshan вне форума Ответить с цитированием
Старый 21.02.2012, 19:40   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

format(dt, "Вы прожили на свете D дней, M месяцев, YY лет")
где dt - дата
только сообщение типа:
Вы прожили на свете 3 дней, 4 месяцев, 42 лет - будет выглядеть больше комично, чем по-русски.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 21.02.2012, 20:21   #4
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Код:
Function dney(dt1 As Date, dt2 As Date) As String
Dim dn&, mes&, lt&
If dt2 < dt1 Then Exit Function
dn = WorksheetFunction.Days360(dt1, dt2) Mod 30
mes = WorksheetFunction.Days360(dt1, dt2) \ 30 Mod 12
lt = WorksheetFunction.Days360(dt1, dt2) \ 360
dney = dn & IIf(dn \ 10 Mod 10 = 1 Or (dn + 9) Mod 10 > 3, " дней", IIf(dn Mod 10 = 1, " день", " дня")) & ", " & _
    mes & " месяц" & IIf(mes > 4 Or mes = 0, "ев", IIf(mes = 1, "", "а")) & ", " & _
    lt & IIf(lt \ 10 Mod 10 = 1 Or (lt + 9) Mod 10 > 3, " лет", IIf(lt Mod 10 = 1, " год", " года"))
End Function
MCH вне форума Ответить с цитированием
Старый 21.02.2012, 23:53   #5
Serge 007
Участник клуба
 
Аватар для Serge 007
 
Регистрация: 15.12.2009
Сообщений: 1,448
По умолчанию

Цитата:
Сообщение от man_of_virtue Посмотреть сообщение
...должна возвращаться информация типа: "Вы прожили на свете dd дней, mm месяцев, yyyy лет"...
http://www.excelworld.ru/index/datedif/0-44
Бесплатная помощь: www.excelworld.ru
Платная помощь: serge_007.planetaexcel@mail.ru
https://yoomoney.ru: 41001419691823
Serge 007 вне форума Ответить с цитированием
Старый 22.02.2012, 00:53   #6
MCH
Форумчанин
 
Регистрация: 21.11.2010
Сообщений: 326
По умолчанию

Цитата:
Сообщение от Serge 007 Посмотреть сообщение
Сергей, формулу из указаной ссылки можно сократить более чем в 2 раза:
Код:
=РАЗНДАТ(B1;A1;"y")&" "&ПРОСМОТР(ОСТАТ(РАЗНДАТ(B1;A1;"y");10)+(ОСТАТ(ЦЕЛОЕ(РАЗНДАТ(B1;A1;"y")/10);10)=1)*5;{0;1;2;5};{"лет";"год";"года";"лет"})&", "&РАЗНДАТ(B1;A1;"ym")&" месяц"&ПРОСМОТР(РАЗНДАТ(B1;A1;"ym");{0;1;2;5};{"ев";"";"а";"ев"})&", "&РАЗНДАТ(B1;A1;"md")&" д"&ПРОСМОТР(ОСТАТ(РАЗНДАТ(B1;A1;"md");10)+(ОСТАТ(ЦЕЛОЕ(РАЗНДАТ(B1;A1;"md")/10);10)=1)*5;{0;1;2;5};{"ней";"ень";"ня";"ней"})
MCH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
преобразование даты wert12 Общие вопросы C/C++ 0 27.01.2011 23:55
Преобразование даты Дворник Общие вопросы Delphi 14 04.08.2010 19:46
Преобразование даты alco84 Microsoft Office Access 2 17.03.2010 17:45
преобразование даты kate158 SQL, базы данных 1 19.08.2009 12:00
Преобразование даты Tavrida Microsoft Office Excel 6 31.03.2009 15:41