Вычислить Разницу во времени За Несколько Дней

Ваша папка /home/meUser/.gnupg исчезла. Вы должны восстановить его из утерян + найдено или из резервной копии.

1
17.08.2018, 21:24
2 ответа

В некоторых строках (предполагается дата GNU):

$ diff=$(($(date -ud '08/17/18 09:03:31' +'%s') - $(date -ud '08/15/18 16:22:05' +'%s')))
$ days=$(($(date -ud @$diff +'%-j')-1)) 
$ date -ud @"$diff" +"$days"'-day(s) %H:%M:%S'
1-day(s) 16:41:26

Действительно до (примерно )365 дней.

Как скрипт:

#!/bin/sh

tosec(){ secs=$(date -ud "$1" +'%s'); }

tosec "$1"; sec1=$secs 
tosec "$2"; sec2=$secs
diff=$((sec2-sec1))
eval "$(date -ud "@$diff" +'days=%-j time=%H:%M:%S')"
printf '%s\n' "$((days-1))-day(s) $time"

Назовите это как:

$./script '08/15/18 16:22:05'   '08/17/18 09:03:31'
1
27.01.2020, 23:42

Я работал над вашим сценарием и придумал это:

#!/bin/bash
TIME1="08/17/2018 11:36:40"
TIME2="08/17/2018 12:37:42"
SEC1=`date +%s -d "${TIME1}"`
SEC2=`date +%s -d "${TIME2}"`
DIFF=`expr ${SEC2} - ${SEC1}`

CONVERTTIME() {
  brief=false
  [[ $1 = "-b" ]] && shift && brief=true

  ((w=${1}/604800))
  ((d=(${1}%604800)/86400))
  ((h=(${1}%86400)/3600))
  ((m=(${1}%3600)/60))
  ((s=${1}%60))

  narrative=()
  list[0]="$w week"
  list[1]="$d day"
  list[2]="$h hour"
  list[3]="$m minute"
  list[4]="$s second"
  for (( component=0; $component < ${#list[@]}; ++component )); do
      # Strip the verbage to get the number
      val="${list[$component]/ [a-z]*}"
      if [[ "$val" -gt 0 ]]; then
          if [[ "$val" -gt 1 ]]; then
              list[$component]+='s'
          fi
          narrative+=( "${list[$component]}" )
      fi
  done

  if $brief; then
      if [[ ${#narrative[@]} -eq 0 ]]; then
          echo "Now"
      else
          echo "About ${narrative[0]} ago"
      fi
  else
      if [[ ${#narrative[@]} -eq 0 ]]; then
          echo "Now"
      elif [[ ${#narrative[@]} -eq 1 ]]; then
          echo "${narrative[0]} ago"
      elif [[ ${#narrative[@]} -eq 2 ]]; then
          echo "${narrative[0]} and ${narrative[1]} ago"
      else
          for (( index=0; $index < $((${#narrative[@]}-1)); ++index )); do
              echo -n "${narrative[$index]}, "
          done
          echo "and ${narrative[$(( ${#narrative[@]}-1))]} ago"
      fi
  fi
}
echo
echo "TIME DIFFERENCE: $(CONVERTTIME $DIFF)"
echo

Так например:

~ > CONVERTTIME 45
45 seconds ago
~ > CONVERTTIME 65
1 minute and 5 seconds ago
~ > CONVERTTIME 13985
3 hours, 53 minutes, and 5 seconds ago
~ > CONVERTTIME 139854
1 day, 14 hours, 50 minutes, and 54 seconds ago
~ > CONVERTTIME -b 139854
About 1 day ago
0
06.04.2020, 19:39

Теги

Похожие вопросы