Timeago + DateJS = NAN
-
28-09-2019 - |
Вопрос
Я пытаюсь использовать 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"
Я был бы очень обязан за любой вклад относительно того, почему это может потерпеть неудачу, и как можно пойти на фиксацию или обходную эту проблему.
Спасибо.
Брайан
Решение
(Я автор Timeago)
Проблема заключается в том, что объем времени ISO8601 Timestamp от DatateJS включает в себя значение миллисекунды. Timeago в настоящее время не поддерживает эту детальную информацию о времене ISO8601; Он только поддерживает подмножество спецификации ISO8601.
Это не первый раз, когда я слышал об этой проблеме; Пришло время, есть патч для обработки миллиса. Я создал А.Н. проблема для отслеживания этого. Отказ Посмотрите на предстоящую версию Timeago. Вероятно, v0.9.
Обновлять: В настоящее время есть новая версия Timeago (V0.9), которая поддерживает миллисекунды на временных метрах. Скачайте это здесь. Отказ Вот то Соответствующий коммит.
Другие советы
Я сделал следующий патч к 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);
+ }
}
});