Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Format a date from inside a Handlebars Template in Meteor

I got a ISO formatted Date from my Data and what I actually want to do, is to modify my date format directly from my Templates.

like this:

{{format my.context.date "myFormat"}} 

I'm using the moment library, so I could write something like this:

{{formatDate my.context.date "DD.MM.YYYY HH:mm"}} // 03.09.2013 18:12 

It would be nice, because I think it's the place where I should be able to do this. In my template.

like image 449
Boris Kotov Avatar asked Sep 02 '13 20:09

Boris Kotov


People also ask

How do you write JavaScript codes in handlebars?

Handlebars doesn't allow you to write JavaScript directly within templates. Instead, it gives you helpers. These are JavaScript functions that you can call from your templates, and help you reuse code and create complex templates. To call a helper, just use it as an expression - {{helpername}} .

What is the format of date in JavaScript?

The preferred Javascript date formats are: Dates Only — YYYY-MM-DD. Dates With Times — YYYY-MM-DDTHH:MM:SSZ.

How do you add handlebars in HTML?

Define the template that is packed with handlebars JavaScript syntax. Compile the template with handlebars JavaScript compile method. Provide the data context i.e. data from server-side in a form of JSON to map to the template. Insert or append the final HTML into your designated DOM location of the HTML page.


1 Answers

The solution is quite simple, and maybe someone will find it useful. In most projects you have a couple of date formats you want to use. So it's a good approach to define your formats with readable names.

For this example I took just 'short' and 'long', but you will see, it's very easy to extend.

So I created an Object in my Client Script:

var DateFormats = {        short: "DD MMMM - YYYY",        long: "dddd DD.MM.YYYY HH:mm" }; 

Also, I created a Handlebars Helper "formatDate".

Edited: Now you should use UI instead of Handlebars

// Deprecated since version 0.8.0  Handlebars.registerHelper("formatDate", function(datetime, format) {  // Use UI.registerHelper.. UI.registerHelper("formatDate", function(datetime, format) {   if (moment) {     // can use other formats like 'lll' too     format = DateFormats[format] || format;     return moment(datetime).format(format);   }   else {     return datetime;   } }); 

As you can see, I use the moment.js lib in my Helper. To install it, just type meteor add momentjs:moment from your command line.

And now, everywhere in my Templates I can use it with the two params, like this:

{{formatDate MyISOString "short"}} // 02 September - 2013 {{formatDate MyISOString "long"}} //  Monday 02.09.2013 18:00 

If you want to create your own formats, take a look at the momentjs docs http://momentjs.com/docs/

Happy coding!

like image 155
Boris Kotov Avatar answered Sep 20 '22 19:09

Boris Kotov