Как найти разницу в днях между двумя датами? - PullRequest
65 голосов
/ 09 февраля 2011

A = "2002-20-10"
B = "2003-22-11"

Как найти разницу в днях между двумя датами?

Ответы [ 18 ]

1 голос
/ 02 февраля 2013

Используйте функции оболочки из http://cfajohnson.com/shell/ssr/ssr-scripts.tar.gz;, они работают в любой стандартной оболочке Unix.

date1=2012-09-22
date2=2013-01-31
. date-funcs-sh
_date2julian "$date1"
jd1=$_DATE2JULIAN
_date2julian "$date2"
echo $(( _DATE2JULIAN - jd1 ))

См. Документацию по http://cfajohnson.com/shell/ssr/08-The-Dating-Game.shtml

1 голос
/ 30 ноября 2013

в unix у вас должны быть установлены даты GNU. вам не нужно отклоняться от Баш. Вот примерное решение с учетом дней, чтобы показать шаги. это может быть упрощено и расширено до полных дат.

DATE=$(echo `date`)
DATENOW=$(echo `date -d "$DATE" +%j`)
DATECOMING=$(echo `date -d "20131220" +%j`)
THEDAY=$(echo `expr $DATECOMING - $DATENOW`)

echo $THEDAY 
0 голосов
/ 09 февраля 2011

Попробуйте:

perl -e 'use Date::Calc qw(Delta_Days); printf "%d\n", Delta_Days(2002,10,20,2003,11,22);'
0 голосов
/ 11 июня 2017

Для MacOS sierra (возможно, из Mac OS X yosemate),

Чтобы получить время эпохи (Seconds from 1970) из файла и сохранить его в var: old_dt=`date -j -r YOUR_FILE "+%s"`

Получить время эпохи текущего времени new_dt=`date -j "+%s"`

Для расчета разности выше двух эпох (( diff = new_dt - old_dt ))

Чтобы проверить, если разница больше 23 дней (( new_dt - old_dt > (23*86400) )) && echo Is more than 23 days

0 голосов
/ 29 декабря 2016

Предполагается, что месяц равен 1/12 года:

#!/usr/bin/awk -f
function mktm(datespec) {
  split(datespec, q, "-")
  return q[1] * 365.25 + q[3] * 365.25 / 12 + q[2]
}
BEGIN {
  printf "%d\n", mktm(ARGV[2]) - mktm(ARGV[1])
}
0 голосов
/ 12 декабря 2011

Другая версия Python:

python -c "from datetime import date; print date(2003, 11, 22).toordinal() - date(2002, 10, 20).toordinal()"
0 голосов
/ 20 июня 2013

Использование команды mysql

$ echo "select datediff('2013-06-20 18:12:54+08:00', '2013-05-30 18:12:54+08:00');"  | mysql -N

Результат: 21

ПРИМЕЧАНИЕ. При расчете используются только части даты значений

.

Ссылка: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_datediff

0 голосов
/ 18 февраля 2013

Предположим, мы вручную выполняем резервное копирование БД Oracle на третичный диск.Затем мы хотим удалить старые резервные копии на этом диске.Итак, вот небольшой скрипт bash:

#!/bin/sh

for backup_dir in {'/backup/cmsprd/local/backupset','/backup/cmsprd/local/autobackup','/backup/cfprd/backupset','/backup/cfprd/autobackup'}
do

    for f in `find $backup_dir -type d -regex '.*_.*_.*' -printf "%f\n"`
    do

        f2=`echo $f | sed -e 's/_//g'`
        days=$(((`date "+%s"` - `date -d "${f2}" "+%s"`)/86400))

        if [ $days -gt 30 ]; then
            rm -rf $backup_dir/$f
        fi

    done

done

Измените каталог и срок хранения («30 дней») в соответствии с вашими потребностями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...