Často chci provést nějaké rychlé výpočty data, jako například:
- Jaký je rozdíl mezi těmito dvěma daty?
- Jaké je datum n týdnů po tomto jiném datu?
Obvykle otevřu kalendář a počítám dny, ale myslím, že by měl existovat program/skript, který bych mohl použít k provádění těchto druhů výpočtů. Nějaké návrhy?
Přijatá odpověď:
„N týdnů po datu“ je snadné s GNU date(1):
$ date -d 'now + 3 weeks'
Tue Dec 6 23:58:04 EST 2011
$ date -d 'Aug 4 + 3 weeks'
Thu Aug 25 00:00:00 EST 2011
$ date -d 'Jan 1 1982 + 11 weeks'
Fri Mar 19 00:00:00 EST 1982
Nevím o jednoduchém způsobu, jak vypočítat rozdíl mezi dvěma daty, ale můžete kolem data(1) zabalit trochu logiky pomocí funkce shell.
datediff() {
d1=$(date -d "$1" +%s)
d2=$(date -d "$2" +%s)
echo $(( (d1 - d2) / 86400 )) days
}
$ datediff '1 Nov' '1 Aug' # Note: answer should be 92 days but in my timezone, DST starts between the dates.
91 days
Vyměňte d1
a d2
chcete-li výpočet data jiným způsobem, nebo si to trochu vylepšit, aby na tom nezáleželo. Kromě toho v případě, že v intervalu dojde k přechodu z jiného než DST na DST, bude jeden ze dnů trvat pouze 23 hodin; můžete to kompenzovat přidáním ½ dne k součtu.
echo $(( (((d1-d2) > 0 ? (d1-d2) : (d2-d1)) + 43200) / 86400 )) days