簡體   English   中英

Javascript-無法將日期格式轉換為漂亮格式

[英]Javascript - Trouble converting date format to pretty format

我有以下來自數據庫的日期格式:

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

我正在嘗試將其轉換為“漂亮”的樣式,例如“ 2個月前”。 我們已經加載了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")`

而且效果很好,無需轉換日期格式。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM