helper.format.date.js 2.14 KB
/*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2015 Adobe Systems Incorporated
 * All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */
/* globals com, java, request, use */
use(function() {
    'use strict';

    var DURATION_7_DAYS = 7 * 24 * 60 * 60 * 1000;
    var format = this.dateFormat || java.text.DateFormat.DEFAULT;
    var date;
    if (!this.date) {
        date = new Date();
    }
    else if (this.date.getTimeZone) { // java.util.Calendar
        date = this.date.getTime();
    }
    else if (this.date.hashCode) { // java.util.Date
        date = new Date(this.date.toInstant().toString());
    }
    else { // java.util.Date or long
        date = new Date(this.date);
    }

    var rtf = new com.day.cq.commons.date.RelativeTimeFormat('r', request.getResourceBundle(request.getLocale()));

    return {
        formattedDate: function() {
            return java.text.DateFormat.getDateInstance(format, request.getLocale()).format(date);
        },
        formattedTime: function() {
            return java.text.DateFormat.getTimeInstance(format, request.getLocale()).format(date);
        },
        formattedDateTime: function() {
            if (new Date().getTime() - date.getTime() < DURATION_7_DAYS) {
                return this.formattedRelativeTime();
            }
            return java.text.DateFormat.getDateTimeInstance(format, format, request.getLocale()).format(date);
        },
        formattedRelativeTime: function() {
            return rtf.format(date.getTime(), true);
        },
        formattedDuration: function() {
            return rtf.format(Date.now() - date, Date.now(), false);
        }
    };

});