/viking-local_time

Primary LanguageJavaScriptMIT LicenseMIT

Viking/local_time

Local Time is a Viking helper for displaying times and dates to users in their local time. The helpers render a <time> element and Javascript converts and formats it to the clients local time.

Inspired by Basecamp's local_time, it's also compatible by the time tags outputed by it's Rails helpers.


Installation

Viking/local_time doesn't automatically update the tags.

If you want to update all the time tags on ever load you'll want to something like:

$(document).ready(function () {
    Viking.View.updateTimeTags();
});

Or if you're using Turbolinks:

$(document).on("ready page:load", function() {
    Viking.View.updateTimeTags();
});

If you want the tags updated every N seconds you'll need to set a timer to update the tags like the following:

setTimeout(function tick() {
    Viking.View.updateTimeTags();
    setTimeout(tick, 1000);
}, 1000);

If your using ajax to return html, you may also want to local_time to run after ever ajax request:

jQuery(document).on("ajaxSuccess", function(event, xhr) {
    if (jQuery.trim(xhr.responseText)) {
        Viking.View.updateTimeTags();
    }
});

Examples

localTime(time)
// => <time data-format="%B %e, %Y %-l:%M%P"
//          data-local="time"
//          datetime="2013-11-27T23:43:22Z"
//          title="November 27, 2013 6:43pm EDT"
//          data-localized="true">November 27, 2013 6:43pm</time>

localTime(time, {class: 'created'})
// => <time class="created"
//          data-format="%B %e, %Y %-l:%M%P"
//          data-local="time"
//          datetime="2013-11-27T23:43:22Z"
//          title="November 27, 2013 6:43pm EDT"
//          data-localized="true">November 27, 2013 6:43pm</time>

localTime(time, '%-l:%M%P')
// => <time data-format="%B %e, %Y %-l:%M%P"
//          data-local="time"
//          datetime="2013-11-27T23:43:22Z"
//          title="November 27, 2013 6:43pm EDT"
//          data-localized="true">6:43pm</time>

localTime('now') // Gets updated to now every `Viking.View.updateTimeTags()`
// => <time data-format="%B %e, %Y %-l:%M%P"
//          data-local="now"
//          datetime="2013-11-27T23:43:22Z"
//          title="November 27, 2013 6:43pm EDT">November 27, 2013 6:43pm</time>

localDate(time)
// => <time data-format="%B %e, %Y"
//          data-local="time"
//          datetime="2013-11-27T23:43:22Z"
//          title="November 27, 2013 6:43pm EDT"
//          data-localized="true">November 27, 2013</time>

localTimeAgo(time)
//   <time data-local="time-ago"
//         datetime="2013-11-27T23:43:22Z"
//         title="November 27, 2013 6:43pm EDT">3 months</time>

// Types:
// - date: Includes the year unless it's current. "Apr 11" or "Apr 11, 2013"
// - time-ago: See +localTimeAgo+, +localTimeAgo+ call this with type 'time-ago'
// - time-or-date: Displays the time if it occurs today or the date if not. 
//                 "3:26pm" or "Apr 11"
// - weekday-or-date: Displays "Today", "Yesterday", the weekday (e.g. Wednesday)
//                    if the time is within a week of today. Otherwise displays
//                    the date.
localRelativeTime(time, 'date')
// => <time data-local="date"
//          datetime="2015-11-27T23:43:22Z"
//          title="November 27, 2015 6:43pm EDT"
//          data-localized="true">November 27</time>