@bigfishtv/cockpit
Version:
82 lines (69 loc) • 2.81 kB
JavaScript
/**
* Time Utilities
* @module Utilities/timeUtils
*/
import moment from 'moment';
var cleanDateFormat = 'MMM Do, YYYY h:mm a';
export function extractDateAndTime(dateTime) {
var splitDate = dateTimeRegex.exec(dateTime);
return [splitDate[1], splitDate[2]];
}
/**
* Takes datetime string and returns humanized time e.g. 7 days ago, 3 minutes ago
* @param {String} dateTime
* @return {string} - returns humanized time string
*/
export function fromNow(dateTime) {
if (!moment(dateTime).isValid()) return '';
return moment(dateTime).fromNow();
}
/**
* Same as fromNow but limited to days
* @param {String} dateTime
* @return {String} - returns humanized time string
*/
export function daysFromNow(dateTime) {
if (!moment(dateTime).isValid()) return '';
return moment().diff(moment(dateTime), 'days');
}
/**
* Checks if time is in range
* @param {String|MomentType} startTime
* @param {String|MomentType} endTime
* @param {String|MomentType} currentTime
* @return {Boolean}
*/
export function inTimeRange(startTime, endTime) {
var currentTime = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
if (!currentTime) currentTime = moment();else if (typeof currentTime == 'string') currentTime = moment(currentTime);
if (!startTime && !endTime) return true;
if (startTime && !endTime) return moment(startTime).isBefore(currentTime);
if (!startTime && endTime) return moment(endTime).isAfter(currentTime);
if (startTime && endTime) return moment(startTime).isBefore(currentTime) && moment(endTime).isAfter(currentTime);
}
/**
* Takes arbitrary dateTime string and returns it formatted a specific way
* @param {String} dateTime
* @param {String} momentFormat
* @return {string}
*/
export function formatDate(dateTime) {
var momentFormat = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : cleanDateFormat;
if (!moment(dateTime).isValid()) return dateTime;
return moment(dateTime).format(momentFormat);
}
/**
* Takes a start and end datetime string (and optional format string) and returns a formatted date range string
* @param {String} start datetime format start
* @param {String} end datetime format end
* @param {String} format format string (default = 'MMMM Do, h:mm a')
* @return {String}
*/
export function getTimeRange(start, end) {
var momentFormat = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : cleanDateFormat;
var startMoment = moment(start);
var endMoment = moment(end);
if (!startMoment.isValid() || !endMoment.isValid()) return null;
var sameDate = startMoment.format('MMMM Do YYYY') === endMoment.format('MMMM Do YYYY');
return startMoment.format(momentFormat) + ' - ' + (sameDate ? endMoment.format('h:mm a') : endMoment.format(momentFormat));
}