格式化输出日期

时间:2010-10-12 09:20:01

标签: javascript facebook

如何使用Javascript格式化日期字符串。例如:

var date_str = "2010-10-06T03:39:41+0000";

结果应该是这样的:

11:39 AM Oct 6th

对此有什么想法吗?注意:date_str是从Facebook Graph API返回日期的示例。

提前致谢。

3 个答案:

答案 0 :(得分:2)

解析日期应该不会太困难 - 所有组件的顺序都是正确的,所以你只需要拆分特殊字符,从月份值中减去1,然后将数组减去最后一个元素。 EM> Date.UTC():

function parseDate(dStr) {
    var d    = dStr.split(/[-:T+]/); d[1] -= 1; d.pop();
    var date = new Date(Date.UTC.apply(Date, d));

这为我们提供了指定日期的 Date 对象,其余的只是将每个组件格式化为字符串:

    // Declare an array of short month names
    var mon  = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov", "Dec"];
    // Determine between AM and PM
        ampm = date.getHours() > 12 ? "PM" : "AM",

    // Prepare for working out the date suffix
        nth  = date.getDate();

    // Date is nth for 11th, 12th and 13th
    if (nth >= 11 && nth <= 13)
        nth = "th";
    // Otherwise it's st, nd, rd, th if the date ends in 1, 2, 3 or anything else
    else
        nth  = ["", "st", "nd", "rd"][(nth+"").slice(-1)] || "th";

    // Return the string formatted date
    return (date.getHours() % 12) + ":" + (date.getMinutes()) + " " + ampm +
           " " + mon[date.getMonth()] + " " + date.getDate() + nth;
}

// Example:
parseDate("2010-10-06T03:39:41+0000");
// -> "4:39 AM Oct 6th" (in my timezone)

如果您希望输出相同而不管时区(提供的原始时间),您需要交换方法 getHours() getMinutes(),等等 getUTCHours() getUTCMinutes()等。

答案 1 :(得分:0)

使用phpjs.org中的此功能:http://phpjs.org/functions/date:380

答案 2 :(得分:0)

如果剥离+0000部分,Date.parse可以解析此问题。然后,您可以在Date对象上使用setTime,您可以自己打印,也可以使用某些库。