Javascript - проблема с преобразованием формата даты в симпатичный формат - PullRequest
0 голосов
/ 02 января 2012

У меня следующий формат даты из базы данных:

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

Я пытаюсь преобразовать его в «красивый» стиль, например «2 месяца назад».У нас pretty.js уже загружено как зависимость, и я хотел бы иметь возможность просто вызвать (* обратите внимание, мне нужно, чтобы это работало специально в сафари):

prettyDate(someDate)

До сих пор я не могу получить что-либо для вывода.Похоже, плагин хочет формат ISO?Я попробовал несколько простых преобразований, но безрезультатно.На самом деле я не думаю, что мне нужно делать здесь много сложного анализа, я упускаю что-то простое, что я могу сделать, чтобы получить свидание с ИСО, довольно?

Большое спасибо за любые мысли.

Ответы [ 2 ]

1 голос
/ 02 января 2012

ДЕМО ЗДЕСЬ

Когда я изменился на

    var date = new Date(time);

Я мог бы сделать

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

1011 * используя *

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

Протестировано в Fx10 и Safari 5 на OSX SnowLeopard

/*
 * 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))
});      
0 голосов
/ 03 января 2012

* Изменить, так что ниже работает для Chrome, но STILL возвращает неопределенное в Safari?Любая идея, что я могу сделать, чтобы Safari правильно обрабатывал дату, как Chrome ???Большое спасибо.

Итак, решение оказалось довольно простым.pretty.js, как написано, возвращает undefined для дат старше 31 дня назад (я думаю, что это действительно странно ...).

Я, видимо, использовал только старые даты, так что их было трудно поймать.

С новой датой или несколькими крошечными изменениями в коде вы можете просто сделать:

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

, и все работает просто отлично, не нужно конвертировать формат даты.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...