首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用moment.js将date()设置为用户时区的午夜

使用moment.js将date()设置为用户时区的午夜
EN

Stack Overflow用户
提问于 2016-03-19 12:28:54
回答 1查看 20.3K关注 0票数 13

我使用moment.js在用户本地时区显示协调世界时的日期:

代码语言:javascript
复制
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小时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-20 04:27:35

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

  1. 使用moment.js时,几乎不需要使用Date对象。仅用于与其他需要Date对象的API进行交互。
  2. 若要以UTC表示时刻,只需使用moment.utc(...),并传递适当的参数,例如表示4月30日午夜UTC的moment.utc([2016,3,30])moment.utc('2016-04-30')
  3. 如果您想将其转换回用户的本地时间,请使用.local()函数。例如,moment.utc('2016-04-30').local()会创建一个时刻,其本地时间与提供的协调世界时时间相同。
  4. 如果您想要用户本地时间中的某个时刻,则可以使用moment(...),例如moment([2016,3,30])moment('2016-04-30'),表示4月30日当地时间午夜。
  5. 您可以使用diff函数来区分两个时刻,该函数可以以特定的单位给出答案,例如m1.diff(m2, 'seconds'),其中m1m2是moment对象。
  6. 您不需要调用两次format。只需用方括号封装您想要输出的任何文本。.format('dddd, DD.MM.YYYY [a las] HH:mm A')
  7. You可能会考虑moment的语言环境支持。如果我没记错的话,"a las“表示西班牙语,然而,如果时间是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“是否在每种情况下都是您想要的。
  8. 这个问题的标题是如何将日期设置为午夜。为此,我推荐使用moment的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');

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36097827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档