JSFiddle - React, Tailwind, and code Playground
moment helper for Handlebars based on https://github.com/helpers/handlebars-helper-moment
by tonytlwu
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/handlebars.js/4.0.12/handlebars.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.21/moment-timezone.min.js"></script>
<div id="target"></div>
JavaScript
// @TODO:
// lodash needs to be added to handlebars dependency
// moment-timezone needs to be loaded as part of moment
// Adds support for calendar=null
// Adds support for fromNow=null
// Adds support for toNow=null
// Moment helpers
Handlebars.registerHelper('moment', function (context, block) {
if (context && context.hash) {
block = _.cloneDeep(context);
context = undefined;
}
var date = moment(context);
if (block.hash.inputFormat) {
date = moment(context, block.hash.inputFormat);
}
if (block.hash.timezone){
date.tz(block.hash.timezone);
}
// Array of parameters to ignore
var ignoreParameters = [
'inputFormat',
'referenceTime',
'ignoreFromNowSuffix',
'ignoreToNowSuffix'
];
// Array of display function to support, in priority order
var displayFunctions = [
'calendar',
'fromNow',
'toNow',
'format'
];
// Reset the language back to default before doing anything else
date.lang('en');
for (var i in block.hash) {
if (_.includes(ignoreParameters, i) || _.includes(displayFunctions, i)) {
continue;
} else if (typeof date[i] === 'function') {
date = date[i](block.hash[i]);
} else {
console.log('moment.js does not support "' + i + '"');
}
}
_.some(displayFunctions, function (func) {
if (!block.hash.hasOwnProperty(func)) {
return false;
}
switch (func) {
// Support for special parameters and syntax in display functions
case 'calendar':
date = date.calendar(block.hash.referenceTime);
break;
case 'fromNow':
date = date.fromNow(block.hash.ignoreFromNowSuffix);
break;
case 'toNow':
date = date.toNow(block.hash.ignoreToNowSuffix);
break;
default:
if (typeof date[func] === 'function') {
date = date[func](block.hash[func]);
}
break;
}
return true;
});
return date;
});
Handlebars.registerHelper('duration', function...