Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将随机生成的日期视为UTC时间_Javascript_Date_Momentjs_Utc_Moment Timezone - Fatal编程技术网

Javascript 如何将随机生成的日期视为UTC时间

Javascript 如何将随机生成的日期视为UTC时间,javascript,date,momentjs,utc,moment-timezone,Javascript,Date,Momentjs,Utc,Moment Timezone,使用该库,我试图生成一个介于2021-02-10 00:00:00和2021-02-10 23:59:59之间的日期,然后创建一个Date对象 尽管我仍在试图理解它在内部是如何工作的,但我认为它在创建Date obj之前使用了我的本地时区,这会导致Date对象超出我指定的范围 例如: let random = momentRandom( moment().tz("UTC").format("2021-02-10 23:59:59"), moment

使用该库,我试图生成一个介于
2021-02-10 00:00:00
2021-02-10 23:59:59
之间的日期,然后创建一个
Date
对象

尽管我仍在试图理解它在内部是如何工作的,但我认为它在创建Date obj之前使用了我的本地时区,这会导致Date对象超出我指定的范围

例如:

let random = momentRandom(
  moment().tz("UTC").format("2021-02-10 23:59:59"),
  moment().tz("UTC").format("2021-02-10 00:00:00")
).format("YYYY-MM-DD HH:mm:ss");
console.log(random);
console.log(new Date(random))
从上面的代码中,我可以得到以下结果(都在范围内)

但最终,如果我继续生成日期,日期obj可能会超出随机生成的值的范围

2021-02-10 21:54:58
2021-02-11T02:54:58.000Z <-- outside the range [2021-02-10 00:00:00, 2021-02-10 23:59:59]
更新:解决方案

我只需在生成的值后面加上“Z”即可得到预期的结果,如下所示:

console.log(新日期(随机+Z”)

然而,我仍然想知道这是怎么回事,以及幕后发生了什么。如果您能回复,我们将不胜感激

moment().tz(“UTC”).format(“2021-02-10 23:59:59”)
将始终返回“2021-02-10 23:59:59”

矩()
为“现在”创建一个矩,需要一组格式化标记,但上面给出的字符串不包含任何标记,因此它只返回字符串(不包含时区偏移,因此被视为本地)

您似乎希望将“2021-02-10 23:59:59”解析为UTC,因此在解析时间戳时使用,而不是在格式化时使用(因为一旦解析为本地,将其更改为UTC就太晚了):

console.log(矩.utc('2021-02-10 23:59:59').format())

momentRandom(结束,开始)
接受您可以传递到
moment()中的任何内容。因此,我建议传递您想要的范围内的实际日期(或时刻),而不是字符串。@HereticMonkey-我看不出使用moment.js仅将结果传递给momentRandom解析字符串有任何意义,而momentRandom将以完全相同的方式解析它。但这当然取决于OP:-)我刚刚测试了这一点,但是在
format()
之前调用
utc()
方法并不能解决问题,除非我在创建日期对象时保留了“Z”,例如
newdate(ramdon+“Z”)
。我想这意味着momentRandom一直在转换为本地,日期构造函数需要
Z
来理解我想将
random
视为UTC?@chris-
new Date(ramdon+“Z”)
在某些实现中会产生无效日期,不要使用它,“t”很重要
moment.utc(“2021-02-10 23:59:59”).format()
生成“2021-02-10T23:59:59Z”,将由moment.js(以及内置解析器)解析为utc。如果momentRandom没有将其视为UTC,那么您的问题就在别处了。@HereticMonkey是的,我肯定用
toDate()
替换了
format()
,这使它工作得更好,谢谢!
2021-02-10 05:08:59
2021-02-10T10:08:59.000Z
2021-02-10 21:54:58
2021-02-11T02:54:58.000Z <-- outside the range [2021-02-10 00:00:00, 2021-02-10 23:59:59]
2021-02-10 05:08:59
2021-02-10T05:08:59.000Z