Javascript 使用moment.js将用户时区中的date()设置为午夜
我使用moment.js在用户本地时区中显示UTC日期:Javascript 使用moment.js将用户时区中的date()设置为午夜,javascript,date,datetime,momentjs,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 ' +
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=新日期(date.UTC(2016,03,30,0,0))代码>我可能需要使用moment.js的一些函数,它可以让我在用户时区一直到午夜
最好的例子是除夕夜。如果我使用UTC,每个人都会有相同的计数器(还剩9小时),但在世界的不同地区,这是没有意义的。对于澳大利亚的人来说,还剩2个小时,而对于美国的人来说,还剩14个小时。我不确定我是否完全理解你的问题,但我会给你一些一般性的建议和提示
在使用moment.js时,几乎不需要使用Date
对象。仅将其用于与需要Date
对象的其他API交互
要获得UTC中的时刻,只需使用矩.UTC(…)
,传递适当的参数,例如矩.UTC([2016,3,30])
或矩.UTC('2016-04-30')
,适用于UTC 4月30日午夜
如果要将其转换回用户的本地时间,请使用.local()
函数。例如,矩.utc('2016-04-30').local()
将创建一个与提供的utc时间具有等效本地时间的矩
如果您希望在用户的本地时间中有一个时刻,那么这将是时刻(…)
,例如当地时间4月30日午夜的时刻([2016,3,30])
或时刻('2016-04-30')
您可以使用diff
功能区分两个力矩,该功能可以以特定单位给出答案,例如m1.diff(m2,'秒')
,其中m1
和m2
是力矩对象
您不需要调用format
两次。只需用方括号封装您想要输出的任何文本.format('dddddd,DD.MM.YYYY[a las]HH:MM a')
您可以研究一下moment的区域设置支持。如果我没弄错的话,“a las”表示西班牙语,但它并不总是“a las”,而是有时“a la”,如果时间是1
。此外,moment只在其.calendar()
函数中使用这些单词,例如在生成类似的短语“mañana a las 13:17”
时。在西班牙地区,用.format('LLLL')
格式化的常规日期类似于:“萨巴多,19 de marzo de 2016 13:17”
。因此,您可能需要验证“las”在任何情况下都是您想要的
这个问题的题目是如何把日期定在午夜。为此,我建议使用矩的startOf
函数m.startOf('day')
将设置从m
开始一天的时刻,通常是午夜。请记住,并不是每个当地的一天都是在每个时区的午夜开始的。由于异常情况,例如,某些天可能从1:00开始。例如,这发生在今年
此外,如果您在UTC模式下创建了时刻,您可能希望先将其转换回本地模式,然后再将其设置为一天的开始。如果不想更改原始力矩对象,请确保先克隆它
综上所述:
var m1 = moment.utc([2016,3,30]);
var m2 = m1.clone().local().startOf('day');
var now = moment();
var diff = m1.diff(now, 'seconds');
构造date
变量时,显式调用date.UTC()
。你所需要做的就是构造一个午夜日期,而不使用date.UTC()
对吗?谢谢你让我觉得自己很愚蠢;)你说得对……你可能想回答这个问题,这样我就可以接受了。这真是太棒了,马特,非常感谢。我并没有意识到所有这些细节,因为我第一次只是利用这个时刻将UTC时间转换为用户本地时间,并将其显示在计数器下面。我会更新我的代码,谢谢!