Page 1 of 2

Как получить вчерашнюю дату?

Posted: Tue 27 Mar, 2007 09:48
by daf
Можно ли с помощью макроса получить вчерашнюю дату?

Сегодняшнюю я получаю так: $Date "%d%m0%y"

Для чего это мне нужно:
С появившейся возможностью раскрашивать файлы по дате хотелось бы "красить" вчерашние файлы определённым цветом. Сейчас я написал макропоследовательность (F9 р ф Enter б $Date "%d%m0%y" Enter Esc) по нажатию на заданную мной комбинацию в диалоговое окно проставляется текущая дата и сегодняшние файлы "красятся" нужным мне образом. Как сделать тоже самое, но чтобы дата была не сегодняшняя, а к примеру вчерашняя?
Или может кто подскажет более красивое решение данной проблемы. Потому как каждый раз при запуске far приходится нажимать эту комбинацию клавиш (ну или при первом запуске комбинацию, а потом сохранить настройки). В идеале конечно же было бы сразу править реестр при загрузке компа в "красящем" фильтре, но там формат даты мне пока мне непонятен.

Ветка в реестре примерно тут
HKEY_CURRENT_USER\Software\Far\Colors\Highlight\Group0
параметр
DateAfter"=hex:00,c8,15,8d,20,6f,c7,01 (это 26.03.2007 00:00:00)

Posted: Tue 27 Mar, 2007 10:01
by Skirda
см. функцию date()

Posted: Tue 27 Mar, 2007 11:18
by daf
Skirda wrote:см. функцию date()
А можно поподробнее как мне использовать эту функцию? Формат комманды $Date понятен. Но опыта написания макросов похоже у меня недостаточно. Покажите плз как мне написать искомое выражение и вставить не сегодняшнее (27.03.2007), а вчерашнее (26.03.2007) число в нужное поле ввода?

Re: Как получить вчерашнюю дату?

Posted: Tue 27 Mar, 2007 11:31
by HaRT
daf wrote:Или может кто подскажет более красивое решение данной проблемы.
Такое предложение уже вносилось в теме Фильтры, но пока не реализовано.

Posted: Tue 27 Mar, 2007 12:53
by daf
HaRT
Это было бы идеальное решение. Я понимаю что однажды это будет сделано.
Но... хотелось бы сделать временное решение...

Posted: Tue 27 Mar, 2007 13:35
by Skirda
daf, начни вот с такого:

Code: Select all

%d=date("%d");
%m=date("%m");
%y=date("%Y");
А дальше все просто.

Code: Select all

%d=%d-1;
$if (%d < 1)
  %m=%m-1
  ....
$end
или подобным образом...
Идея в том, чтобы разложить дату на запчасти, вычисть, проверить, скорректировать и... собрать обратно.

Posted: Tue 27 Mar, 2007 13:52
by Вадим Захаренко
Skirda
Ага и при этом не забыть, что если сегодня 1-е число, то вчера может быть и 31 и 30 и 29 и 28 :P

Posted: Tue 27 Mar, 2007 13:55
by Skirda
Вадим Захаренко, ну а кто спорит? :-)
Хмм... может добавить что-нить типа dateadd() и datediff().

Posted: Tue 27 Mar, 2007 14:10
by Вадим Захаренко
Skirda
Тогда уже только одну - Add
если дату откатываем назад - то значение отрицательное и переключатель - что добавляем, дни, минуты, часы, месяцы, секунды, годы, недели

Posted: Tue 27 Mar, 2007 14:14
by Skirda
а разница дат не интересна?

Posted: Tue 27 Mar, 2007 14:16
by Вадим Захаренко
Skirda
Нужна, конечно
Просто я воспринял datediff как уменьшение даты, в отличии от прибавления

Posted: Tue 27 Mar, 2007 14:35
by JlblC
тогда уж 64-битовой тип данных наподобие TFileTime (номер 100-наносекундного интервала с 1 Января, 1601)
перевод в него и из него (типа функционала $Date)
ну и сложение и вычитание переменных этого типа данных

Posted: Tue 27 Mar, 2007 14:44
by Вадим Захаренко
JlblC
Чего уж там мелочиться - VBA for FAR Manager ;-)

Posted: Tue 27 Mar, 2007 15:06
by Skirda
Вадим Захаренко wrote:Чего уж там мелочиться - VBA for FAR Manager ;-)
Хмм... скоро и такое будет возможно (если кто "компилятор" напишет :))

Posted: Tue 27 Mar, 2007 15:11
by Skirda
JlblC wrote:тогда уж 64-битовой тип данных наподобие TFileTime
А вот это уже интересно. Что нить типа date2int и int2date :)
И... в panelitem добавить для propIndex индексы 15, 16 и 17, аналогичные 3, 4 и 5, но в представлении __int64.