markzzz
markzzz

Reputation: 47945

How can I parse this Date in Javascript?

I get date from a JSON such as:

2013-11-26T11:36:32+0000

And I want as dd-MM-yyyy h: hh.mm, such as 26/11/2013 h: 11:36. So this is my code:

var dateParsed = new Date(Date.parse(feed.created_time));
console.log(dateParsed.toString('dd-MM-yyyy h: hh.mm'));

but it prints:

Tue Nov 26 2013 12:36:32 GMT+0100 (ora solare Europa occidentale)

Where am I wrong on this parsing?

Upvotes: 0

Views: 2933

Answers (4)

superphonic
superphonic

Reputation: 8074

Couple of useful functions I came across some time ago:

Usage

var dateParsed = new Date(Date.parse(feed.created_time));
var newdate = dateFormat(dateParsed, "dd-MM-yyyy h: hh.mm");

Functions

 * Date Format 1.2.3
 * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
 * MIT license
 *
 * Includes enhancements by Scott Trenda <scott.trenda.net>
 * and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */


var dateFormat = function () {
var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
    timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
    timezoneClip = /[^-+\dA-Z]/g,
    pad = function (val, len) {
        val = String(val);
        len = len || 2;
        while (val.length < len) val = "0" + val;
        return val;
    };

// Regexes and supporting functions are cached through closure
return function (date, mask, utc) {
    var dF = dateFormat;

    // You can't provide utc if you skip other args (use the "UTC:" mask prefix)
    if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
        mask = date;
        date = undefined;
    }

    // Passing date through Date applies Date.parse, if necessary
    date = date ? new Date(date) : new Date;
    if (isNaN(date)) throw SyntaxError("invalid date");

    mask = String(dF.masks[mask] || mask || dF.masks["default"]);

    // Allow setting the utc argument via the mask
    if (mask.slice(0, 4) == "UTC:") {
        mask = mask.slice(4);
        utc = true;
    }

    var _ = utc ? "getUTC" : "get",
        d = date[_ + "Date"](),
        D = date[_ + "Day"](),
        m = date[_ + "Month"](),
        y = date[_ + "FullYear"](),
        H = date[_ + "Hours"](),
        M = date[_ + "Minutes"](),
        s = date[_ + "Seconds"](),
        L = date[_ + "Milliseconds"](),
        o = utc ? 0 : date.getTimezoneOffset(),
        flags = {
            d:    d,
            dd:   pad(d),
            ddd:  dF.i18n.dayNames[D],
            dddd: dF.i18n.dayNames[D + 7],
            m:    m + 1,
            mm:   pad(m + 1),
            mmm:  dF.i18n.monthNames[m],
            mmmm: dF.i18n.monthNames[m + 12],
            yy:   String(y).slice(2),
            yyyy: y,
            h:    H % 12 || 12,
            hh:   pad(H % 12 || 12),
            H:    H,
            HH:   pad(H),
            M:    M,
            MM:   pad(M),
            s:    s,
            ss:   pad(s),
            l:    pad(L, 3),
            L:    pad(L > 99 ? Math.round(L / 10) : L),
            t:    H < 12 ? "a"  : "p",
            tt:   H < 12 ? "am" : "pm",
            T:    H < 12 ? "A"  : "P",
            TT:   H < 12 ? "AM" : "PM",
            Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
            o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
            S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
        };

    return mask.replace(token, function ($0) {
        return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
    });
};
}();

// Some common format strings
dateFormat.masks = {
"default":      "ddd mmm dd yyyy HH:MM:ss",
shortDate:      "m/d/yy",
mediumDate:     "mmm d, yyyy",
longDate:       "mmmm d, yyyy",
fullDate:       "dddd, mmmm d, yyyy",
shortTime:      "h:MM TT",
mediumTime:     "h:MM:ss TT",
longTime:       "h:MM:ss TT Z",
isoDate:        "yyyy-mm-dd",
isoTime:        "HH:MM:ss",
isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
dayNames: [
    "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
    "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
],
monthNames: [
    "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
    "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
return dateFormat(this, mask, utc);
};

Upvotes: 1

jsist
jsist

Reputation: 5253

There is nothing wrong with what javascript is parsing the date as. But specifically if you want date-time in your convenient format you can use dateformat.js library to format date and time.

Using the functions in the link, you can get desired results simply by following code:

console.log(dateParsed.format('dd/mm/yyyy ') + 'h: ' + dateParsed.format('hh:MM'));

Hope it helps...

Upvotes: 1

Mark Walters
Mark Walters

Reputation: 12390

Something like this

function padDateTime(dt) { //Add a preceding zero to months and days < 10
    return dt < 10 ? "0"+dt : dt;
}

var dateParsed = new Date(Date.parse(feed.created_time));
var dd = padDateTime(dateParsed.getDate());
var mm = padDateTime(dateParsed.getMonth()+1);
var yyyy = dateParsed.getFullYear();
var hrs = padDateTime(dateParsed.getHours());
var mins = padDateTime(dateParsed.getMinutes());

var myDateTimeString = dd+"/"+mm+"/"+yyyy+" h: "+hrs+":"+mins;

Here is a fiddle

Upvotes: 2

vcsjones
vcsjones

Reputation: 141638

JavaScript's toString doesn't let you pass in arguments for formatting. toString just prints exactly what you got. You can build the string yourself using getHours, getMonth, etc. Also, various libraries address this, such as moment.js.

If you are targeting very new versions of certain browser (Chrome and IE 11), Intl.DateTimeFormat is available as a built-in means of doing this. Eventually we'll get to a point where this is pretty standard, but we aren't there yet.

Upvotes: 0

Related Questions