使用moment.js

时间:2016-03-19 04:28:54

标签: javascript date datetime momentjs

我使用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个小时。

1 个答案:

答案 0 :(得分:25)

我不确定我是否完全理解你的问题,但我会给你一些一般的建议和提示。

  1. 使用moment.js时,几乎不需要使用Date对象。仅用于与期望Date对象的其他API进行交互。

  2. 要获得UTC时刻,只需使用moment.utc(...),在4月30日午夜时分传递适当的参数,例如moment.utc([2016,3,30])moment.utc('2016-04-30')

    < / LI>
  3. 如果要将其转换回用户的本地时间,请使用.local()功能。例如,moment.utc('2016-04-30').local()将创建一个时刻,其当前时间等于提供的UTC时间。

  4. 如果你想在用户当地时间片刻,那么4月30日午夜{em} moment(...)moment([2016,3,30])

  5. 您可以使用moment('2016-04-30')功能区分两个时刻,这可以给出特定单位的答案,例如diff其中m1.diff(m2, 'seconds')m1是时刻对象

  6. 您无需再拨打m2两次。只需用方括号封装您想要输出的任何文本。 format

  7. 您可以查看片刻的语言环境支持。如果我没有弄错的话,“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”是否恰好符合您的要求。

  8. 此问题的标题是如何将日期设置为午夜。为此,我建议使用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