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...