@bigfishtv/cockpit
Version:
80 lines (69 loc) • 2.57 kB
JavaScript
/**
* 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))
)
}