应用使用当前时间的规则来改变Moment.js语言环境显示格式

时间:2016-04-07 14:31:34

标签: momentjs

我是moment.js的新手,正在为我正在进行的项目运行一些测试用例。其中一个要求是根据相对于当前时间的规则向用户显示事件时间。规则如下:

  1. 如果当前时间和事件时间是用户的同一天,则只显示时间。
  2. 如果当前时间和活动时间在同一年,则应显示日,月和时间(即应省略年份)
  3. 如果上述规则均不适用,则应显示完整的日期和时间。
  4. 通过一些例子:

    :一种。请考虑当前的UTC时间是2016-04-07T12:00:00我想在2016-04-07T01:22:44 UTC显示活动。

    我。对于伦敦的用户,我将显示“欧洲/伦敦”时区:

    将当前UTC转换为欧洲/伦敦时间为07年4月16日,13:00:00 将事件UTC转换为欧洲/伦敦时间为07年4月7日,02:22:44

    欧洲/伦敦时间是在同一天,因此,根据规则,我们将显示:02:22:44

    II。对于洛杉矶的用户,我将显示“America / Los_Angeles”时区:

    将当前UTC转换为America / Los_Angeles时间为07-Apr-16,05:00:00 将事件UTC转换为America / Los_Angeles将于06年4月6日,18:22:44

    America / Los_Angeles时间在不同的日期,因此规则1不适用。事件发生在同一年,因此我们将展示:06年4月6日,18:22:44

    B中。对于此示例,请考虑当前UTC时间是2016-04-07T12:00:00(如前所述),我想在2016-01-01T02:33:55 UTC显示活动。

    我。对于伦敦的用户,我将显示“欧洲/伦敦”时区:

    将当前UTC转换为欧洲/伦敦时间为07年4月16日,13:00:00 将事件UTC转换为欧洲/伦敦将于01年1月16日,02:33:55

    欧洲/伦敦时间在不同的日子,因此规则1不适用。事件发生在同一年,因此我们将展示:01-Jan,02:33:55

    II。对于洛杉矶的用户,我将显示“America / Los_Angeles”时区:

    将当前UTC转换为America / Los_Angeles时间为07-Apr-16,05:00:00 将事件UTC转换为America / Los_Angeles会给出31-Dec-15,18:33:55

    规则1或2都不适用,因为事件是在不同的年份,所以我们将显示:31-Dec-15,18:33:55

    我已经完成了上述工作,最后得到的代码如下(这是来自我的jsFiddle测试代码):

      if (currentMomentForZone.format("DD-MMM-YYYY")==eventMomentForZone.format("DD-MMM-YYYY")) {
        // If the event and current day are the same just show the time
        div.innerHTML = div.innerHTML + "Event Time: "+ eventMomentForZone.format("HH:mm:ss") + "<BR/>";    
      } else if (currentMomentForZone.format("YYYY")==eventMomentForZone.format("YYYY")) {
          // If the event is in the current year then don't bother to include the year
        div.innerHTML = div.innerHTML + "Event Time: " + eventMomentForZone.format("DD-MMM, HH:mm:ss") + "<BR/>";   
      } else {
        // Different year, so show the full date time
        div.innerHTML = div.innerHTML + "Event Time: "+ eventMomentForZone.format('DD-MMM-YY, HH:mm:ss') + "<BR/>"; 
      }
    

    完整的测试代码位于http://jsfiddle.net/sbssw/xy5bv3bt/的JS小提琴中 - 这种方法效果不错,但目前没有考虑日期显示的区域设置。

    我的问题是双重的,首先我应该如何最好地将语言环境设置应用到上面的规则中? http://momentjs.com/docs/#/displaying/format/下的可用选项不包含省略年份的格式,这看起来很简单,所以我想知道如何才能最好地实现这一目标?

    其次,有没有比我在jsfiddle示例中使用的过程更好的方法呢?通常我需要显示数百个事件,在一些更罕见的情况下需要几千个,所以我需要一个优化的解决方案,而我对moment.js缺乏经验让我怀疑是否有更好的方法。

0 个答案:

没有答案