2016-05-13 124 views
0

我必须计算设定时间和当前服务器时间之间的时间差。两个时区格式化日期之间的moment.js差异

我正在使用momentjs和时区时区库。

这是我有:

var serverTime = moment.tz(new Date(), "Europe/Berlin").format(); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin").format(); 
var baz = bar.diff(serverTime); 

console.log('server time is: ' + serverTime); 
console.log('time diff is: ' + baz); 

这给了我一个错误:

TypeError: bar.diff is not a function 

是它可能造成两种格式的时区之间的日期差异比较?如果不是,使用momentjs库进行这种计算的最佳方法是什么?

回答

0

format产生一个字符串,所以直到你需要不使用它一个字符串。

var now = moment.tz("Europe/Berlin"); 
var bar = moment.tz("2016-05-14 00:00:00", "Europe/Berlin"); 
var baz = bar.diff(now); 

console.log('current time is: ' + now.format()); 
console.log('time diff is: ' + baz); 

请注意,除非您在服务器上运行此代码,否则它不是“服务器时间”。只要它在客户端上运行,它仍然基于客户端的时钟 - 即使您使用不同的时区。

+0

谢谢。我想我应该更好地命名变量。我在两个日期之间使用diff方法转换为我指定的时区,以获得所需的结果。不过,如果使用utc是模拟服务器时间的好主意。 – Grant

+0

如果你只是比较*时间,你甚至不需要指定任何特定的时区,因为它在引擎盖下使用UTC。我只在第一行中包含TZ,因为稍后会显示它。如果你只关心diff,你可以使用'moment()'。 –

+0

WRT“服务器时间”,真正做到这一点的唯一方法是通过从服务器获取时间戳 - 当然,您必须考虑传输该时间戳有延迟。你似乎在混淆“使用服务器的时区”和“使用服务器的时钟”。请记住,客户可以将自己的时钟更改为任何他们想要的。不能保证它会同步。 –

0

moment.js真的很棒!

看来我可以简单地做:

moment.duration(day14.diff(serverTime)).asHours(); 

或获得的分钟数字和时间分别

moment.duration(day14.diff(serverTime)).minutes(); 
moment.duration(day14.diff(serverTime)).hours();