Moment.js:结果总是"几秒钟前"在firefox / ie

时间:2014-06-09 08:42:42

标签: javascript ruby-on-rails datetime ruby-on-rails-4 momentjs

我是从UTC +8时区开始的,当我尝试将2014-06-04 12:51:53 +0800 /从Rails / timestamp转换为我的时区时。但它只能在chrome中工作,而其他所有浏览器都无法应用UTC时区。结果总是a few seconds ago。以下是我如何使用它:

window.updateTimestamps = (elements)->
  moment.lang('mn')
  moment().tz("Asia/Ulaanbaatar").format()
  elements.each( ->
    timestamp = moment(new Date($(@).data('datetime')))
    $(@).html(timestamp.fromNow())
  )


$(document).on('ready', ->

  moment.tz.add
    zones:
      "Asia/Ulaanbaatar": [
        "7:7:32 - LMT 1905_7 7:7:32"
        "7 - ULAT 1978 7"
        "8 Mongol ULA%sT"
      ]

    rules:
      Mongol: [
        "1983 1984 3 1 7 0 0 1 S"
        "1983 1983 9 1 7 0 0 0"
        "1985 1998 2 0 8 0 0 1 S"
        "1984 1998 8 0 8 0 0 0"
        "2001 2001 3 6 8 2 0 1 S"
        "2001 2006 8 6 8 2 0 0"
        "2002 2006 2 6 8 2 0 1 S"
      ]
    links: {}

以下是我尝试转换的HTML:

<abbr class="time-ago" data-datetime="2014-06-04 12:51:53 +0800"></abbr>

以下是代码:

  timeAgos = $('abbr.time-ago')
  window.updateTimestamps(timeAgos)
  setInterval(window.updateTimestamps, 60000, timeAgos)

谢谢你的回答。我不知道? Plz帮助我:)

1 个答案:

答案 0 :(得分:5)

Javascript控制台在尝试使用您的日期初始化moment.js时会显示警告,并建议read this bug report。您必须将日期转换为ISO格式

>>> moment("2014-06-04 12:51:53 +0800").fromNow()
"a few seconds ago"
>>> moment("2014-06-04T12:51:53+0800").fromNow()
"7 days ago"

或改为使用格式说明符:

>>> moment("2014-06-04 12:51:53 +0800", "YYYY-MM-DD hh:mm:ss +ZZ").fromNow()
"7 days ago"