UNPKG

@bigfishtv/cockpit

Version:

80 lines (69 loc) 2.57 kB
/** * Time Utilities * @module Utilities/timeUtils */ import moment from 'moment' const cleanDateFormat = 'MMM Do, YYYY h:mm a' export function extractDateAndTime(dateTime) { const 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, currentTime = 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, momentFormat = 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, momentFormat = cleanDateFormat) { const startMoment = moment(start) const endMoment = moment(end) if (!startMoment.isValid() || !endMoment.isValid()) return null const sameDate = startMoment.format('MMMM Do YYYY') === endMoment.format('MMMM Do YYYY') return ( startMoment.format(momentFormat) + ' - ' + (sameDate ? endMoment.format('h:mm a') : endMoment.format(momentFormat)) ) }