我使用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个小时。
答案 0 :(得分:25)
我不确定我是否完全理解你的问题,但我会给你一些一般的建议和提示。
使用moment.js时,几乎不需要使用Date
对象。仅用于与期望Date
对象的其他API进行交互。
要获得UTC时刻,只需使用moment.utc(...)
,在4月30日午夜时分传递适当的参数,例如moment.utc([2016,3,30])
或moment.utc('2016-04-30')
。
如果要将其转换回用户的本地时间,请使用.local()
功能。例如,moment.utc('2016-04-30').local()
将创建一个时刻,其当前时间等于提供的UTC时间。
如果你想在用户当地时间片刻,那么4月30日午夜{em} moment(...)
或moment([2016,3,30])
您可以使用moment('2016-04-30')
功能区分两个时刻,这可以给出特定单位的答案,例如diff
其中m1.diff(m2, 'seconds')
和m1
是时刻对象
您无需再拨打m2
两次。只需用方括号封装您想要输出的任何文本。 format
您可以查看片刻的语言环境支持。如果我没有弄错的话,“a las”表示西班牙语,但是如果小时为.format('dddd, DD.MM.YYYY [a las] HH:mm A')
,它不会总是“a las”,但有时候“a la”。此外,时刻仅在其1
函数中使用这些单词,例如在生成类似.calendar()
的短语时。在西班牙语语言环境中使用"mañana a las 13:17"
格式化的常规日期类似于:.format('LLLL')
。因此,您可能需要验证“a las”是否恰好符合您的要求。
此问题的标题是如何将日期设置为午夜。为此,我建议使用moment "sábado, 19 de marzo de 2016 13:17"
函数。 startOf
会将当前m.startOf('day')
设置为当天的开始,通常 午夜。请记住,并非每个当地日实际上都在每个时区的午夜开始。由于daylight saving time之类的异常,有些日子可能会在凌晨1点开始。例如,今年发生in Brazil on October 16th。
此外,如果您在UTC模式下创建了该时刻,您可能希望先将其转换回本地模式,然后再将其设置为当天的开始。如果您不想更改原始时刻对象,请务必先将其克隆。
把这一切放在一起:
m