我使用moment.js在用户本地时区显示协调世界时的日期:
var date = new Date(Date.UTC(2016,03,30,0,0,0));
var now = new Date();
var diff = (date.getTime()/1000) - (now.getTime()/1000);
var textnode = document.createTextNode(moment(date).format('dddd, DD.MM.YYYY') + ' a las ' + moment(date).format('HH:mm A'));
document.getElementsByClassName("date")[0].appendChild(textnode.cloneNode(true));稍后,我使用diff变量来显示倒计时计时器。
我想向当地时区的每个人展示一个不同的倒计时计时器。(在他们的时区使用直到午夜的差值,而不是UTC)
但我正在努力让它工作。我可能需要使用moment.js的一些函数,而不是使用var date = new Date(Date.UTC(2016,03,30,0,0,0));,它可以让我在用户所在的时区一直到午夜。
最好的例子是新年前夕。如果我使用UTC,每个人都会有相同的计数器(剩下9个小时),但在世界的不同地方,这是没有意义的。对于澳大利亚的人来说,应该是2小时,而对于美国的人来说,应该是14小时。
发布于 2016-03-20 04:27:35
我不确定我是否完全理解你的问题,但我会给你一些一般性的建议和技巧。
Date对象。仅用于与其他需要Date对象的API进行交互。moment.utc(...),并传递适当的参数,例如表示4月30日午夜UTC的moment.utc([2016,3,30])或moment.utc('2016-04-30')。.local()函数。例如,moment.utc('2016-04-30').local()会创建一个时刻,其本地时间与提供的协调世界时时间相同。moment(...),例如moment([2016,3,30])或moment('2016-04-30'),表示4月30日当地时间午夜。diff函数来区分两个时刻,该函数可以以特定的单位给出答案,例如m1.diff(m2, 'seconds'),其中m1和m2是moment对象。format。只需用方括号封装您想要输出的任何文本。.format('dddd, DD.MM.YYYY [a las] HH:mm A')1,它并不总是"a las",有时是"a la”。此外,moment仅在其.calendar()函数中使用这些单词,例如在生成像"mañana a las 13:17"这样的短语时。在西班牙语语言环境中,使用.format('LLLL')格式化的常规日期将类似于:"sábado, 19 de marzo de 2016 13:17"。因此,您可能需要验证"a las“是否在每种情况下都是您想要的。startOf函数。m.startOf('day')会将m的时刻设置为一天的开始,通常是午夜。请记住,并不是每个时区的每一天都是从午夜开始的。由于像daylight saving time这样的异常,有些日子可能从1:00开始。例如,这发生在今年的in Brazil on October 16th。此外,如果您在UTC模式下创建了时刻,则在将其设置为一天的开始之前,您可能希望先将其转换回本地模式。如果您不想更改原始的moment对象,请确保先克隆它。
把所有这些放在一起:
var m1 = moment.utc(2016,3,30);var m2 = m1.clone().local().startOf('day');var now = moment();var diff = m1.diff(now,'seconds');
https://stackoverflow.com/questions/36097827
复制相似问题