Skip to content

disarticulate/time-hash

Repository files navigation

timehash

About

timehash is an algorithm (with multiple reference implementations) for calculating variable precision sliding windows of time. When performing aggregations and correlations on large-scale data sets, the ability to convert precise time values into 'malleable intervals' allows for many novel analytics.

Using `sliding windows of time is a common practice in data analysis but prior to the timehash algorithm it was more of an art than a science. -- abeusher/timehash

Installation

npm install time-hash -s

npm install

npm run:cover

Usage

Version 1.2.0 Update

Improved browser compatability in Rollup

Version 1.1.1 Update

    timehash.encodems(new Date().getTime()) // encodes from milliseconds epoch instead of timeseconds
    timehash.decodems('000000000b') // decodes to milliseconds epoch instead of timeseconds

reason: Better compatability with Javascript Date() functions

Version 1.0

    var TimeHash = require('time-hash') // or import TimeHash from 'time-hash'

    let timehash = new TimeHash()

    let [begin, cease] = ['1970-01-01 00:00:00 GMT', '2098-01-01 00:00:00 GMT'] // should use UTC/GMT
    
    let begin_input = new Date(begin) 
    let pivot_input = new Date('2034-01-01 00:00:00 GMT') 
    let cease_input = new Date(cease)

    let begin_hash = timehash.encode_from_datetime(begin_input)
    let pivot_hash = timehash.encode_from_datetime(pivot_input)
    let cease_hash = timehash.encode_from_datetime(cease_input)

    `${begin_hash}`
    '0000000000'
    
    `${pivot_hash}`
    'bfffffffff'
    
    `${cease_hash}`
    'ffffffffff'
    
    begin_hash_after = timehash.after(begin_hash)
    `${begin_hash_after}`
    '0000000001'
    `${timehash.before(begin_hash_after)}` === begin_hash

    let [neighbor_before, neighbor_after] = timehash.neighbors('000000000a')
    `${timehash.before(neighbor_before)}` === begin_hash
    `${neighbor_after}` === '000000000b'

    let input = '000000000a'
    let expand = timehash.expand(input)
    let [expand_before, input_clone, expand_after] = expand
    `${expand_before}` === timehash.before(input_clone)
    `${expand_after}` === timehash.after(input_clone)

    let [begin_value, begin_error] = timehash.decode_exactly('0000000000')
    new Date(begin_value - begin_error).toString() === begin_input.toString()

Other Compatible Implementations

  • python timehash
    • a reference implementation in pure python
  • perl timehash
    • a reference implementation in perl
  • java timehash
    • a reference implementation in java

License

Copyright © 2017 LoreFolk, LLC. This source code is licensed under the MIT license found in the LICENSE.txt file. The documentation to the project is licensed under the CC BY-SA 4.0 license.


Reference implement made with ♥ by Abe Usher Abe Usher and [contributors] (https://github.com/abeusher/timehash/blob/master/CONTRIBUTORS.md)

Testing/DepoymentTemplate made with ♥ by Konstantin Tarkus (@koistya) and contributors

About

A Javascript implementation of abeusher/timehash

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published