1 (изменено: sanniauto, 2018-11-28 22:52:39)

Тема: AHK: операции с датой

Привет, подскажите пожалуйста как можно высчитать сколько дней прошло с той или иной даты. Например, дата=14 ноября, а сегодня 28 ноября, как можно с помощью скрипта определить сколько дней прошло с даты 13 ноября до сегодня?

2

Re: AHK: операции с датой

Даты для операций сравнения должны быть в формате YYYYMMDDHH24MISS.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3 (изменено: donbluugame, 2018-11-29 06:37:23)

Re: AHK: операции с датой

http://ahk-wiki.ru/formattime

4

Re: AHK: операции с датой

donbluugame, это какой-то плохой сайт. Люди старались-переводили, а он тупо скопировал.

+ открыть спойлер

Пожертвовать на развитие проекта Autohotkey wiki
Что делать, если захотелось помочь проекту?

Первым делом стоит немного подождать, возможно это пройдет.
Если же желание не иссякло- вы можете помочь в развитии ahk-wiki
следующими способами:

    Материально, перечислив нам $1-2 на печеньки.
    Номер кошелька в Yandex.Money: 410011739310176
    Умственно, отправляя нам ваши переводы статей по
    Autohotkey, делясь готовыми решениями и скриптами.
    Их вы можете отправить на giperZIPer@mail.ru

Администратор ресурса: Flex_Humphrey (Симаков Яков)

5

Re: AHK: операции с датой

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

Сам плагиатор, по ссылкам в VK. Похоже, юный позер, сильно замороченный на Хаски, увидевший в этом дешёвом опыте возможность придать своей персоне значение.

6 (изменено: svoboden, 2018-11-29 19:31:21)

Re: AHK: операции с датой

Так вы определитесь с какого числа идет вычитание с 14 или 13. Может, такой вариант пойдет:

vDate1 := "13/11" ; 13 ноября
oTemp := StrSplit(vDate1, "/")
vDate1 := A_Year Format("{:02}{:02}", oTemp.2, oTemp.1)
vDate2 := SubStr(A_Now, 1, 8)
EnvSub, vDate1, % vDate2, D
MsgBox, % vDate1 " days"

7

Re: AHK: операции с датой

Как в дату добавить год для скрипта из предыдущего сообщения? Например, "2018/13/11".

8

Re: AHK: операции с датой

Проще всего сразу располагать год-месяц-число в правильном порядке:

date := "2018/11/13"
date := StrReplace(date, "/")
diff -= date, Days ; здесь diff принимает значение A_Now
MsgBox, % diff

Или так:

date := "2018/13/11"
date := Format("{1:}{3:02}{2:02}", StrSplit(date, "/")*)
diff -= date, D
MsgBox, % diff
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

9 (изменено: svoboden, 2021-04-26 14:57:33)

Re: AHK: операции с датой

Если нужно узнать сколько дней прошло между сегодняшней датой "2021/04/26" и, например, "2021/11/13", то последний код выдает -200, этот:


vDate1 := "13/11" ; 13 ноября
oTemp := StrSplit(vDate1, "/")
vDate1 := 2021 Format("{:02}{:02}", oTemp.2, oTemp.1)
vDate2 := SubStr(A_Now, 1, 8)
EnvSub, vDate2, % vDate1, D
MsgBox, % vDate2 " days"

-201. Проверял этим: https://planetcalc.ru/274/. Рассчитывает, как 201.

10 (изменено: teadrinker, 2021-04-26 15:03:52)

Re: AHK: операции с датой

Зависит, от какого времени дня нужно отсчитывать, мой код отсчитывает от текущего момента, ваш — от начала дня. Если нужно от начала дня, тогда вначале установить diff, как

diff := A_Year . A_MM . A_DD
date := "2021/11/13"
date := StrReplace(date, "/")
diff := A_Year . A_MM . A_DD
diff -= date, D
MsgBox, % diff

date := "2021/13/11"
date := Format("{1:}{3:02}{2:02}", StrSplit(date, "/")*)
diff := A_Year . A_MM . A_DD
diff -= date, D
MsgBox, % diff
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11 (изменено: EV, 2021-05-03 11:12:48)

Re: AHK: операции с датой

EDate   = 202104041901
EDueDate= %A_Now%
EnvSub EDate, EDueDate, S
MsgBox % GetFormatedTime(EDate) 

GetFormatedTime(_seconds)
{
   local x, t, ft
   static units

   If (_seconds = 0)
      Return "0 seconds"
   units = day.hour.minute.second
   Loop Parse, units, .
   {
      x := A_Index = 1 ? 24 * 3600 : 60**(4 - A_Index)
      t := _seconds // x
      _seconds -= t * x
      If (t != 0)
         ft .= t . " " . A_LoopField . (t = 1 ? "" : "s") . (A_Index = 4 ? "" : " ")
   }
   Return ft
}

12

Re: AHK: операции с датой

EV, отлично! Я б чуть сократил:

GetFormatedTime(sec)
{
   s := Abs(sec)
   Loop Parse, % "day.hour.minute.second", .
   {
      x := A_Index = 1 ? 24 * 3600 : 60**(4 - A_Index)
      t := s // x
      s -= t * x
      If (t != 0)
         ft .= t . " " . A_LoopField . (t = 1 ? "" : "s") . (A_Index = 4 ? "" : " ")
   }
   Return ft ? (sec < 0 ? "- " : "") . ft : 0
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder