#date-time #time #difference #duration #command-line-tool #cli #date-range

app since

Small CLI utility to calculate time differences, with semantic UI for humans

2 releases

0.11.1 Jun 8, 2020
0.11.0 Jun 8, 2020

#13 in #date-range

MIT/Apache

19KB
299 lines

Since

Since what?

14:30:29 risto@GALACTICA /home/risto>
↪ since 13:00
1 hours and 30 minutes

Install with Cargo:

cargo install since

Now you should have the binary in ~/.cargo/bin/since (on Linux systems).

Semantic CLI utility for calculating time differences

↪ since -h
since v0.11.0

Fetch time difference between <from> and <to>.

If no parameters are given, will return time since UNIX epoch.
Missing <to> argument will always default to current datetime.
All subcommands share exactly the same functionality and arguments as base
command, just filtering the output to different format.

All values are generally rounded down.

USAGE:
    since [ARGS]
    since <SUBCOMMAND>

FLAGS:
    -h, --help       Prints help information
    -V, --version    Prints version information

ARGS:
    <from>    Start time or date.
    <to>      End time or date, for custom range. Default is current datetime.

SUBCOMMANDS:
    years      Print the output in years (approx)
    months     Print the output in months (approx)
    weeks      Print the output in weeks (approx)
    days       Print the output in days
    hours      Print the output in hours
    minutes    Print the output in minutes
    seconds    Print the output in seconds

Supported date & time formats

All formats are hard-coded and chosen with the loose criteria of "what makes sense", the goal is to be intuitive, not exhaustive (yet).

Time

  • HH:MM
  • HH:MM:SS

Date

  • YYYY-MM-DD
  • YYYY/MM/DD
  • YYYY.MM.DD
  • DD-MM-YYYY
  • DD/MM/YYYY
  • DD.MM.YYYY
  • DD MONTH YYYY (eg. Dec or December)
  • YYYY MONTH DD

Datetime

  • [date] [time]
  • [date]T[time]

Notes on functionality

  • In spite of holy UI semantics, future values are also supported. All values are always absolute distances, thus no negative values should ever appear.
  • All output (especially weeks/months/years) should generally be treated as "intuitive approximations", due to ambiguity in the definition of when has 1 $time_unit passed.
  • All calculations are done in the local system's timezone
  • Space-separated parameters must always be wrapped in quotes
  • All naive times (eg. 12:15) are always intepreted as "today"

Examples

 date
Mon  8 Jun 10:12:14 EEST 2020

# The original usecase, shorthand time calculations
↪ since 7:00
3 hours and 12 minutes

↪ since 24.12.2019
6 months

↪ since 24-12-2012T16:00:00
8 years

# Explicit time output formats
↪ since hours 7:00
3

↪ since minutes 7:00
192

↪ since days 7:00
0

↪ since days 24.12.2019
166

↪ since months 24.12.2019
6

↪ since years 24.12.2002
18

# Custom time ranges with explicit second parameter
↪ since minutes 14:00 23:45
585

# Mixing parameter formats
↪ since hours "24 December 2019 18:15:30" 2020-6-20
4286

# Unix epochs
↪ since
1591600334

↪ since minutes
26526672

↪ since years
50

Build

git clone https://github.com/ryyst/since.git
cd since
cargo build --release

Now you can find the binary in ./target/release/since

Todo

  • Tests
  • Improve documentation
  • More accurate year/month calculations
  • A flag for decimal output
  • Exhaustive time fractions for the "guessed" output
    • eg. "1 years, 2 months, 3 days, 5 hours and 15 minutes"

Dependencies

~3MB
~42K SLoC