Как добавить продолжительность, которая может быть в любой единице времени к данной отметке времени в JQ? - PullRequest
0 голосов
/ 23 января 2019
{
    "applicationDuration": {
    "duration": 4,
    "unit": "DAY"
    },
    "startTime": {
    "long": 1539196595567
    }
}

Я пишу jq-скрипт, который принимает json с полями, подобными приведенным выше.Цель состоит в том, чтобы увеличить startTime, добавив значение duration.startTime в миллисекундах, в то время как duration может быть любой единицей времени (мс, сек, мин, час, день, неделя, месяц, год), которой предоставляется unit.Можно ли сделать что-то вроде ниже?

startTime = ToMillis(FOO(startTime) + BAR(duration, unit))

Похоже на java`s: https://www.javacodex.com/Date-and-Time/Add-Time-To-A-Timestamp

1 Ответ

0 голосов
/ 24 января 2019

Вот простое решение, которое учитывает високосные годы:

# Input and output are both in milliseconds since the epoch; 
# the output time is later than the input time by $n units, where
# the units are determined by $unit, one of the strings in `dict`.
def later($n; $unit):
  def dict: { YEAR:0, MONTH:1, DAY:2, HOUR:3, MINUTE:4, SECOND:5, MIN:4, SEC:5};
  gmtime
  | .[dict[$unit]] += $n
  | mktime ;

Тестирование

("2019-01-24" | strptime("%Y-%m-%d") | mktime)
| (later(2; "YEAR"), later(731; "DAY"))
| strftime("%Y-%m-%d")

Выход соответствует ожидаемому (поскольку 2020 год является високосным):

"2021-01-24"
"2021-01-24"

ключевое слово: addTime

...