ng-time-past-pipe
Version:
Reactive textual representation of the time that has been passed between a given date and now in your Angular App.
39 lines • 4.7 kB
JavaScript
/**
* Optimistic parse a given input to seconds that past between it and now
*
* @param value A value of type string, number or date
* @return The time past in seconds between now and input value
* @internal
*/
export const parseInputValue = (value) => {
let dateValueTime;
if (typeof value === 'number') {
if (value <= 0) {
// Negative number will always be handled as seconds in the future
return value;
}
const length = Math.ceil(Math.log10(value + 1));
if (length < 10 && length > 0) {
return value; // Guessing the input is already the passed seconds
}
if (length === 10) {
value *= 1000;
} // Guessing UnixTimestamp
dateValueTime = value; // All other lengths are considered intentional and therefore processed
}
else {
// Use Date constructor to determine the microseconds
dateValueTime = (value instanceof Date ? value : new Date(value)).getTime();
}
return Math.floor((Date.now() - dateValueTime) / 1000);
};
/**
* Strict TAInput Type Validator
*
* @param value The optimistic input value to validate
* @internal
*/
export const validateTAInputType = (value) => {
return (typeof value === 'number' || typeof value === 'string' || value instanceof Date);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZS1wYXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdGltZS1wYXN0LXBpcGUvc3JjL2xpYi90aW1lLXBhc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBS0E7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLENBQUMsS0FBYyxFQUFVLEVBQUU7SUFDeEQsSUFBSSxhQUFhLENBQUM7SUFDbEIsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDN0IsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFO1lBQ2Qsa0VBQWtFO1lBQ2xFLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEQsSUFBSSxNQUFNLEdBQUcsRUFBRSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDN0IsT0FBTyxLQUFLLENBQUMsQ0FBQyxtREFBbUQ7U0FDbEU7UUFFRCxJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUU7WUFBRSxLQUFLLElBQUksSUFBSSxDQUFDO1NBQUUsQ0FBQyx5QkFBeUI7UUFDL0QsYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLHVFQUF1RTtLQUMvRjtTQUFNO1FBQ0wscURBQXFEO1FBQ3JELGFBQWEsR0FBRyxDQUFDLEtBQUssWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztLQUM3RTtJQUVELE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYyxFQUFXLEVBQUU7SUFDN0QsT0FBTyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxZQUFZLElBQUksQ0FBQyxDQUFDO0FBQzNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQWNjZXNzb3IgSW5wdXQgVHlwZVxuICovXG5leHBvcnQgdHlwZSBUQUlucHV0ID0gbnVtYmVyIHwgc3RyaW5nIHwgRGF0ZTtcblxuLyoqXG4gKiBPcHRpbWlzdGljIHBhcnNlIGEgZ2l2ZW4gaW5wdXQgdG8gc2Vjb25kcyB0aGF0IHBhc3QgYmV0d2VlbiBpdCBhbmQgbm93XG4gKlxuICogQHBhcmFtIHZhbHVlIEEgdmFsdWUgb2YgdHlwZSBzdHJpbmcsIG51bWJlciBvciBkYXRlXG4gKiBAcmV0dXJuIFRoZSB0aW1lIHBhc3QgaW4gc2Vjb25kcyBiZXR3ZWVuIG5vdyBhbmQgaW5wdXQgdmFsdWVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgcGFyc2VJbnB1dFZhbHVlID0gKHZhbHVlOiBUQUlucHV0KTogbnVtYmVyID0+IHtcbiAgbGV0IGRhdGVWYWx1ZVRpbWU7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHZhbHVlIDw9IDApIHtcbiAgICAgIC8vIE5lZ2F0aXZlIG51bWJlciB3aWxsIGFsd2F5cyBiZSBoYW5kbGVkIGFzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGguY2VpbChNYXRoLmxvZzEwKHZhbHVlICsgMSkpO1xuICAgIGlmIChsZW5ndGggPCAxMCAmJiBsZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdmFsdWU7IC8vIEd1ZXNzaW5nIHRoZSBpbnB1dCBpcyBhbHJlYWR5IHRoZSBwYXNzZWQgc2Vjb25kc1xuICAgIH1cblxuICAgIGlmIChsZW5ndGggPT09IDEwKSB7IHZhbHVlICo9IDEwMDA7IH0gLy8gR3Vlc3NpbmcgVW5peFRpbWVzdGFtcFxuICAgIGRhdGVWYWx1ZVRpbWUgPSB2YWx1ZTsgLy8gQWxsIG90aGVyIGxlbmd0aHMgYXJlIGNvbnNpZGVyZWQgaW50ZW50aW9uYWwgYW5kIHRoZXJlZm9yZSBwcm9jZXNzZWRcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgRGF0ZSBjb25zdHJ1Y3RvciB0byBkZXRlcm1pbmUgdGhlIG1pY3Jvc2Vjb25kc1xuICAgIGRhdGVWYWx1ZVRpbWUgPSAodmFsdWUgaW5zdGFuY2VvZiBEYXRlID8gdmFsdWUgOiBuZXcgRGF0ZSh2YWx1ZSkpLmdldFRpbWUoKTtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gZGF0ZVZhbHVlVGltZSkgLyAxMDAwKTtcbn07XG5cbi8qKlxuICogU3RyaWN0IFRBSW5wdXQgVHlwZSBWYWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0gdmFsdWUgVGhlIG9wdGltaXN0aWMgaW5wdXQgdmFsdWUgdG8gdmFsaWRhdGVcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUQUlucHV0VHlwZSA9ICh2YWx1ZTogVEFJbnB1dCk6IGJvb2xlYW4gPT4ge1xuICByZXR1cm4gKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB2YWx1ZSBpbnN0YW5jZW9mIERhdGUpO1xufTtcbiJdfQ==