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