我有一个使用类fromNow
的范围来告诉我们更改span标记之间的日期以更改为'time ago'格式。它完美无缺,但只有在有一个跨度时才能正常工作。
如果我添加第二个范围,则会显示Invalid date
。
以下https://jsfiddle.net/xyh0Lmpp/3/可以看到它不起作用,为什么当有两个类时它会说Invalid date
,但是与一个类合作?
我想要做的就是将所有跨越fromNow
的范围更改为'time ago'格式,如果不能这样做,只需显示span标记之间的日期。 / p>
答案 0 :(得分:2)
如果span
类有多个fromNow
,则$('.fromNow')
选择器会匹配所有new Date(string)
选项(请参阅class selector)。您可以使用each
循环每个匹配的元素。
目前,moment(String)
文档说:
当从字符串创建片刻时,我们首先检查字符串是否与已知的ISO 8601格式匹配,然后检查字符串是否与RFC 2822 Date time格式匹配,然后再降至{{1}的后退如果找不到已知格式。
警告:浏览器支持解析字符串is inconsistent。因为没有关于应该支持哪种格式的规范,所以在某些浏览器中有效的功能在其他浏览器中不起作用。
要解析除ISO 8601字符串以外的任何内容的一致结果,您应该使用String + Format。
因此,在您的情况下,您可以使用'MMM DD, YYYY h:mm A'
作为格式参数使用moment(String, String)
。这将在浏览器中运行,它不会在控制台中显示弃用警告,也不会显示Invalid Date
。
这是一个实时样本:
var then = $('.fromNow');
update = function() {
// Loop each element matched by class selector
then.each(function(){
// Create jQuery element for current element
$elem = $(this);
// Parse text using moment, then format relative time
$elem.html(moment($elem.text(), 'MMM DD, YYYY h:mm A').fromNow());
});
}
update();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>
<span class="fromNow">March 16, 2018 6:54 PM</span>
<span class="fromNow">March 16, 2018 5:54 PM</span>