Javascript - 无法将日期格式转换为漂亮的格式

时间:2012-01-02 16:24:24

标签: javascript date

我有来自数据库的以下日期格式:

Tue, 01 Nov 2011 15:58:56 -0400

我要做的是将其转换为“漂亮”的风格,如“2个月前”。我们已将pretty.js作为依赖项加载,我希望能够只调用(*请注意我需要这个才能在safari中专门工作):

prettyDate(someDate)

到目前为止,我无法输出任何内容。看起来这个插件想要ISO格式?我尝试了一些简单的转换,但无济于事。我真的不认为我应该在这里进行很多复杂的解析,我是否遗漏了一些简单的事情,我可以做我的日期到ISO,漂亮吗?

非常感谢任何想法。

2 个答案:

答案 0 :(得分:1)

DEMO HERE

当我改为

    var date = new Date(time);

我能做到

<span id="date">Fri, 30 Dec 2011 15:58:56 -0400</span><br/>
<span id="prettydate"></span>
使用

var dateString = $("#date").text();
$("#prettydate").text(prettyDate(dateString))

<span class="jqdate" title="Wed, 28 Dec 2011 15:58:56 -0400"></span>
<span class="jqdate" title="Thu, 29 Dec 2011 15:58:56 -0400"></span>

使用

 $(".jqdate").prettyDate();

在OSX SnowLeopard上的Fx10和Safari 5中测试

/*
 * JavaScript Pretty Date
 * Copyright (c) 2011 John Resig (ejohn.org)
 * Licensed under the MIT and GPL licenses.
 */

// Takes an ISO time and returns a string representing how
// long ago the date represents.
function prettyDate(time){
//    var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," "));
    var date = new Date(time);
    var diff = (((new Date()).getTime() - date.getTime()) / 1000),
        day_diff = Math.floor(diff / 86400);

     if ( isNaN(day_diff) || day_diff < 0 || day_diff >= 31 ) {
        alert("Not a date or too old")
        return "";
     }
    return day_diff == 0 && (
            diff < 60 && "just now" ||
            diff < 120 && "1 minute ago" ||
            diff < 3600 && Math.floor( diff / 60 ) + " minutes ago" ||
            diff < 7200 && "1 hour ago" ||
            diff < 86400 && Math.floor( diff / 3600 ) + " hours ago") ||
        day_diff == 1 && "Yesterday" ||
        day_diff < 7 && day_diff + " days ago" ||
        day_diff < 31 && Math.ceil( day_diff / 7 ) + " weeks ago";
}

$(document).ready(function() {
  // If jQuery is included in the page, adds a jQuery plugin to handle it as well
  if ( typeof jQuery != "undefined" )
    jQuery.fn.prettyDate = function(){
        return this.each(function(){
            var date = prettyDate(this.title);
            if ( date )
                jQuery(this).text( date );
        });
    };
    var dateString = new String(Date.parse($("#date").html()));

    $("#prettydate").text(prettyDate(dateString))
});      

答案 1 :(得分:0)

* 编辑,因此以下适用于Chrome,但STILL在Safari中返回未定义?知道我可以做些什么来让Safari正确处理日期,因为Chrome是???非常感谢。

所以解决方案最终变得相当简单。如上所述,pretty.js会在31天之前的日期返回undefined(我觉得很奇怪......)。

我显然只是使用较旧的日期,所以很难捕捉到。

使用较新的日期或一些微小的代码,你可以做到:

`prettyDate("Fri, 30 Dec 2011 15:58:56 -0400")`

它工作正常,无需转换日期格式。

由于