片刻说无效日期

时间:2018-03-17 00:24:40

标签: jquery momentjs

我有一个使用类fromNow的范围来告诉我们更改span标记之间的日期以更改为'time ago'格式。它完美无缺,但只有在有一个跨度时才能正常工作。

如果我添加第二个范围,则会显示Invalid date

以下https://jsfiddle.net/xyh0Lmpp/3/可以看到它不起作用,为什么当有两个类时它会说Invalid date,但是与一个类合作?

我想要做的就是将所有跨越fromNow的范围更改为'time ago'格式,如果不能这样做,只需显示span标记之间的日期。 / p>

1 个答案:

答案 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>