我是moment.js的新手,正在为我正在进行的项目运行一些测试用例。其中一个要求是根据相对于当前时间的规则向用户显示事件时间。规则如下:
通过一些例子:
:一种。请考虑当前的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缺乏经验让我怀疑是否有更好的方法。