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

雪球

我使用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. 当使用moment.js时,几乎不需要使用该Date对象。仅将其用于与需要Date对象的其他API进行交互

  2. 要在UTC上花费片刻,只需使用moment.utc(...),并传递适当的参数,例如moment.utc([2016,3,30])moment.utc('2016-04-30')UTC 4月30日午夜。

  3. 如果要将其转换回用户的本地时间,请使用该.local()功能。例如,moment.utc('2016-04-30').local()将创建一个具有与提供的UTC时间等效的本地时间的时刻。

  4. 如果您想在用户的本地时间中使用片刻,则该时间为moment(...),例如moment([2016,3,30])moment('2016-04-30')4月30日当地时间的午夜

  5. 您可以使用diff函数来区分两个时刻,该函数可以以特定单位给出答案,例如m1.diff(m2, 'seconds')wherem1m2are moment对象。

  6. 您不需要打format两次电话只需用方括号封装要输出的任何文本。.format('dddd, DD.MM.YYYY [a las] HH:mm A')

  7. 您可能会考虑一下瞬间的语言环境支持。如果我没有记错的话,“ la las”表示西班牙语,但是如果时间是,则并非总是“ las las”,有时也可以是“ la la” 1另外,moment仅在其.calendar()功能中使用这些单词,例如在生成类似的短语时"mañana a las 13:17".format('LLLL')在西班牙语言环境中以格式设置的常规日期类似于:"sábado, 19 de marzo de 2016 13:17"因此,您可能想验证在每种情况下“ las”正是您想要的。

  8. 这个问题的标题是如何将日期设置为午夜。为此,我建议使用矩startOf函数。m.startOf('day')会将时间设定为m一天的开始时间,通常是午夜。请记住,并不是每个本地日期实际上都是在每个时区的午夜开始的。由于诸如夏令时之类的异常,某些日子可能从1:00开始。例如,这种情况发生今年10月16日的巴西

    另外,如果您是在UTC模式下创建时刻,则可能希望先将其转换回本地模式,然后再将其设置为一天的开始时间。如果您不想更改原始的矩对象,请确保先克隆它。

    放在一起:

    var m1 = moment.utc([2016,3,30]);
    var m2 = m1.clone().local().startOf('day');
    
    var now = moment();
    var diff = m1.diff(now, 'seconds');
    

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章