Timeago + DateJS = NaN - PullRequest
       9

Timeago + DateJS = NaN

2 голосов
/ 21 июня 2010

Я пытаюсь использовать timeago ( источник ), с datejs, и это не работает.Вот пример кода, который я ожидал бы сработать (учитывая, что загружены timeago и datejs):

>>> d = new Date()
Mon Jun 21 2010 13:24:37 GMT-0400 (EST) { _orient=1, more...}
>>> d.toISOString()          // datejs.toISOString
"2010-06-21T17:24:37.501Z"   // this is a valid ISO8601 string, I believe
>>> $.timeago(d.toISOString()) // this should work
"NaN years ago"

Я был бы очень благодарен за любой вклад в то, почему это может быть неудачным,и как можно решить или обойти эту проблему.

Спасибо.

Брайан

Ответы [ 2 ]

5 голосов
/ 21 июня 2010

(я автор Timeago)

Проблема заключается в том, что вывод метки времени ISO8601 по datejs содержит значение в миллисекундах.Timeago в настоящее время не поддерживает эту подробную метку времени ISO8601;он поддерживает только часть спецификации ISO8601.

Я не впервые слышу об этой проблеме;пора есть патч для обработки миллиса.Я создал проблему для отслеживания этой .Посмотрите на предстоящую версию Timeago.Вероятно, v0.9.

Обновление: В настоящее время существует новая версия Timeago (v0.9), которая поддерживает миллисекунды в метках времени. Скачать здесь .Вот соответствующий коммит .

1 голос
/ 21 июня 2010

Я сделал следующий патч для jquery.timeago.js, который решает проблему:

diff -r 89cc78838c70 media/js/contrib/jquery.timeago.js
--- a/media/js/contrib/jquery.timeago.js    Mon Jun 21 10:22:12 2010 -0400
+++ b/media/js/contrib/jquery.timeago.js    Mon Jun 21 13:45:32 2010 -0400
@@ -87,8 +87,14 @@
     datetime: function(elem) {
       // jQuery's `is()` doesn't play well with HTML5 in IE
       var isTime = $(elem).get(0).tagName.toLowerCase() == "time"; // $(elem).is("time");
-      var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
-      return $t.parse(iso8601);
+      var date_string = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
+
+        // for use with datejs @ http://www.datejs.com/
+      if (typeof(Date.parse) == 'function') {
+        return Date.parse(date_string);
+      } else {
+        return $t.parse(date_string);
+      }
     }
   });
...