代码之家  ›  专栏  ›  技术社区  ›  WittyPleb

时刻显示无效日期

  •  1
  • WittyPleb  · 技术社区  · 7 年前

    我有一个使用类的span fromNow 告诉moment将span标记之间的日期更改为“time ago”格式。它可以完美地工作,但只有在有一个跨度的情况下。

    如果我加上第二个跨度,它会说 Invalid date

    这是 https://jsfiddle.net/xyh0Lmpp/3/ 在哪里可以看到它不起作用,为什么它会说 无效日期 当有两个类,但与一个类一起工作时?

    我想做的是让它与全班保持一致 从现在开始 更改为“time ago”格式,如果无法更改,只需显示span标记之间的日期。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Community CDub    3 年前

    当您有多个 span 使用 fromNow 将您的 $('.fromNow') 选择器匹配所有选项(请参见 class selector )。您可以使用 each 循环每个匹配的元素。

    就目前而言 moment(String) 医生说:

    当从字符串创建力矩时,我们首先检查字符串是否与已知的匹配 ISO 8601 格式,然后检查字符串是否与 RFC 2822 Date time 在拖放到 new Date(string) 如果找不到已知格式。

    警告: 浏览器支持解析字符串 is inconsistent 。因为没有关于应该支持哪些格式的规范,所以在某些浏览器中起作用的内容在其他浏览器中不会起作用。

    要在解析ISO 8601字符串以外的任何字符串时获得一致的结果,应使用 String + Format

    因此,在您的情况下,您可以使用 moment(String, String) 使用 'MMM DD, YYYY h:mm A' 作为格式参数。这将跨浏览器工作,它不会在控制台中显示弃用警告,也不会显示 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>