Home Man
Search
Today's Posts
Register

Helpful articles from our Users.

Simple date and time calulation in BASH

Tags
tutorials

Login to Reply

 
Thread Tools Search this Thread
# 1  
Old 10-08-2006
Simple date and time calulation in BASH

The GNU date command in full of goodies but not when it comes to calculate a date or time difference. Here is what I came up with after looking to more than one solution.

Code should be self explaining.

Code:
#!/bin/bash

date2stamp () {
    date --utc --date "$1" +%s
}

stamp2date (){
    date --utc --date "1970-01-01 $1 sec" "+%Y-%m-%d %T"
}

dateDiff (){
    case $1 in
        -s)   sec=1;      shift;;
        -m)   sec=60;     shift;;
        -h)   sec=3600;   shift;;
        -d)   sec=86400;  shift;;
        *)    sec=86400;;
    esac
    dte1=$(date2stamp $1)
    dte2=$(date2stamp $2)
    diffSec=$((dte2-dte1))
    if ((diffSec < 0)); then abs=-1; else abs=1; fi
    echo $((diffSec/sec*abs))
}

# USAGE # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 

# convert a date into a UNIX timestamp
    stamp=$(date2stamp "2006-10-01 15:00")
    echo $stamp

# from timestamp to date
    stamp2date $stamp

# calculate the number of days between 2 dates
    # -s in sec. | -m in min. | -h in hours  | -d in days (default)
    dateDiff -s "2006-10-01" "2006-10-32"
    dateDiff -m "2006-10-01" "2006-10-32"
    dateDiff -h "2006-10-01" "2006-10-32"
    dateDiff -d "2006-10-01" "2006-10-32"
    dateDiff  "2006-10-01" "2006-10-32"

# number of seconds between two times
    dateDiff -s "17:55" "23:15:07"
    dateDiff -m "17:55" "23:15:07"
    dateDiff -h "17:55" "23:15:07"

# number of minutes from now until the end of the year
    dateDiff -m "now" "2006-12-31 24:00:00 CEST"

# Other standard goodies from GNU date not too well documented in the man pages
    # assign a value to the variable dte for the examples below
    dte="2006-10-01 06:55:55"
    echo $dte

    # add 2 days, one hour and 5 sec to any date
    date --date "$dte  2 days 1 hour 5 sec"

    # substract from any date
    date --date "$dte 3 days 5 hours 10 sec ago"
    date --date "$dte -3 days -5 hours -10 sec"

    # or any mix of +/-. What will be the date in 3 months less 5 days
    date --date "now +3 months -5 days"

    # time conversions into ISO-8601 format (RFC-3339 internet recommended format)
    date --date "sun oct 1 5:45:02PM" +%FT%T%z
    date --iso-8601=seconds --date "sun oct 1 5:45:02PM"
    date --iso-8601=minutes

    # time conversions into RFC-822 format
    date --rfc-822 --date "sun oct 1 5:45:02PM"

Warning: the non-standard format %s might not work on all version of date. Works fine of my GNU date 5.2.1

Last edited by ripat; 10-09-2006 at 10:57 AM.. Reason: Added some options to the function dateDiff
The Following 7 Users Say Thank You to ripat For This Useful Post:
alxndr (03-19-2015), FatFreddie (05-03-2011), kovacsakos (03-22-2012), linuxadmin (09-21-2011), Scooby2 (04-06-2012), StevenHB (03-04-2012), zouhair (09-28-2010)
Login to Reply

« Previous Thread | Next Thread »
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

More UNIX and Linux Forum Topics You Might Find Helpful
Thread Thread Starter Forum Replies Last Post
How to add missing date and time in a bash script? ernesto Shell Programming and Scripting 14 01-21-2016 03:44 AM
How to do simple date (time) calculation in shell script? nbsparks Shell Programming and Scripting 7 09-16-2013 05:59 PM
Complex calulation in shell script harpal singh Shell Programming and Scripting 4 07-15-2013 05:13 PM
Simple date and time calulation in BASH frood Shell Programming and Scripting 2 03-06-2013 02:00 PM
date time stamps in bash SkySmart Shell Programming and Scripting 6 10-14-2012 05:37 PM
Converting date/time and generating offsets in bash script emdan Shell Programming and Scripting 2 07-03-2012 08:08 AM
Help making simple perl or bash script to create a simple matrix torchij Shell Programming and Scripting 16 04-26-2012 04:05 AM
Date comparison with 'string date having slashes and time zone' in Bash only TariqYousaf Homework & Coursework Questions 1 10-08-2009 01:27 PM
Processing a log file based on date/time input and the date/time on the log file primp Shell Programming and Scripting 4 03-16-2008 11:23 AM
a simple way of converting a date in seconds to normal date travian HP-UX 2 11-23-2006 11:25 AM


All times are GMT -4. The time now is 03:51 PM.

Unix & Linux Forums Content Copyrightę1993-2018. All Rights Reserved.
UNIX.COM Login
Username:
Password:  
Show Password