Epoch: segundos desde 1970

Referencia:

Cómo calcular Epoch:

  • Unix shell: date +%s
  • MySQL: SELECT unix_timestamp(now())
  • Perl: perl -e “print time”
  • PHP: time()
  • Python: import time first, then time.time()
  • Ruby: Time.now
  • Java: long epoch = System.currentTimeMillis()/1000;
  • Javascript: Math.round(new Date().getTime()/1000.0)
  • PostgreSQL: SELECT extract(epoch FROM now());
  • SQL Server: SELECT DATEDIFF(s, '19700101', GETDATE())

Convert date to Epoch:

  • Unix: date +%s -d“Jan 1, 1980 00:00:01”
  • PHP: mktime(hour, minute, second, month, day, year) More information
  • MySQL: SELECT unix_timestamp(time)

Convert Epoch to Date:

  • Unix: date -d @1190000000
  • Awk: echo $EPOCH|awk ‘{print strftime(”%c”,$1)}’
  • PHP: date(output format, epoch);
  • MySQL: from_unixtime(epoch, optional output format)
  • Perl: perl -e “print scalar(localtime(epoch))”

Date Scripts

#!/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"