Javascript-将日期格式转换为漂亮格式时出现问题

Javascript - Trouble converting date format to pretty format

本文关键字:格式 问题 漂亮 日期 转换 Javascript-      更新时间:2023-09-26

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

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

我想做的是将其转换为"两个月前"这样的"漂亮"风格。我们已经将pretty.js作为依赖项加载,我希望能够直接调用(*请注意,我需要它来专门在safari中工作):

prettyDate(someDate)

到目前为止,我无法输出任何内容。看起来插件想要ISO格式?我试过一些简单的转换,但都没有用。我真的不认为我需要在这里做太多复杂的解析,我是不是错过了一些简单的事情,可以让我的日期达到ISO,达到漂亮?

非常感谢你的想法。

演示

当我换成

    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))
});      

*编辑,所以下面的内容适用于Chrome,但在Safari中仍然返回未定义?你知道我能做些什么让Safari像Chrome一样正确处理日期吗???非常感谢。

因此,解决方案最终相当简单。正如它所写的,pretty.js为31天前的日期返回undefined(我觉得真的很奇怪…)

很明显,我只使用较旧的日期,所以很难理解。

有了一个更新的日期或对代码进行一些小的修改,你可以简单地做:

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

它工作得很好,不需要转换日期格式。

感谢