bash round minutes to 5

To do this you can subtract the minutes modulo 5 from the total minutes. To print it out:

echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc

To save it to a variable:

my_var=$(echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc)

This relies on your date format string remaining as it is now - a string of numbers.

Example output:

$ date "+%Y%m%d%H%M"
201404010701
$ echo "$(date "+%Y%m%d%H%M") - ($(date +%M)%5)" | bc
201404010700

A little string manipulation:

case $TIMESTAMP in 
    *[1234]) TIMESTAMP=${TIMESTAMP%?}0;; 
    *[6789]) TIMESTAMP=${TIMESTAMP%?}5;; 
esac

${TIMESTAMP%?} removes the last character. Ref: http://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter-Expansion


Not exactly bash only but using dateutils' dround utility, it boils down to:

$ dround now -5m
2014-04-01T10:35:00

or with your format specifiers:

$ dround now -5m -f '%Y%m%d%H%M'
201404011035

Disclaimer: I am the author of that project.

Tags:

Bash

Timestamp