我有一个表示为字符串的日期:

const dateStr = "2022-09-29T00:00:00Z";

因此这是带有零(相当于"2022-09-29T00:00:00+0000")的UTC格式

当我使用MomJS时,它被转换为我的当地时间(这很好),但我的当地时间-3小时,所以在这个例子中我有22-09-28小时,发生这种情况是因为MomJs不认为它是UTC,但它是UTC格式-为什么? 请看下面的截图,我是说_isUTC

enter image description here

我正在测试的代码如下:

const dateStr = "2022-09-29T00:00:00Z";
const res = moment(dateStr)
const res1 = moment(dateStr).format('YYYY-MM-DD'); // will be 2022-09-28 because of -3 hours my timezone and it is not detected as UTC.
console.log(res);

附注:我知道moment(dateStr).utc().format('YYYY-MM-DD')可以工作,但它能被自动检测到吗?

推荐答案

虽然Moment recognizes将输入作为UTC日期,但在使用Moment()时,它仍将转换为本地时间.

Moment的字符串解析函数,如Moment(字符串)和Moment.utc(字符串),如果提供了偏移量信息,则接受偏移量信息,但将结果Moment对象转换为本地或UTC时间.

我建议使用UTC mode、使用Moment.utc()函数或使用Moment().utc().

在UTC模式下,所有显示方法将以UTC时间而不是本地时间显示.

这应该会为您提供所需的行为:

const dateStr = "2022-09-29T00:00:00Z";
const dtUTC = moment.utc(dateStr);

console.log('UTC mode:');
console.log('dtUTC.format():', dtUTC.format());
console.log('_.isUTC:', dtUTC ._isUTC);
console.log('UTC offset:', dtUTC .format('Z'));

// Using the moment() constructor, the date will be recognized as UTC but converted to the local timezone:
console.log('\nLocal:');
const dtLocal = moment(dateStr );
console.log('dtLocal.format():', dtLocal.format());
console.log('_.isUTC:', dtLocal._isUTC);
console.log('UTC offset:', dtLocal.format('Z'));
.as-console-wrapper { max-height: 100% !important; }
   
<script src="https://momentjs.com/downloads/moment.js"></script>

Javascript相关问答推荐

如何获取转换字节的所有8位?

如何用显示网格平滑地将元素从一个地方移动到另一个地方?

Javascript,部分重排序数组

使用Java脚本根据按下的按钮更改S文本

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

使用原型判断对象是否为类的实例

如何使用JS创建一个明暗功能按钮?

Reaction Redux&Quot;在派单错误中检测到状态Mutations

当我try 将值更改为True时,按钮不会锁定

当代码另有说明时,随机放置的圆圈有时会从画布上消失

将范围 Select 器添加到HighChart面积图

将相关数据组合到两个不同的数组中

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

从异步操作返回对象

如何在Reaction中设置缺省值, Select 下拉列表,动态追加剩余值?

将以前缓存的 Select 器与querySelector()一起使用

CSS网格使页面自动滚动

在不使用AJAX的情况下将JavaScript数组值传递给Laravel控制器?

使用重新 Select 和对象理解 Select 器备忘

我在JS代码中收到超过最大调用堆栈大小的错误,但我找不到原因.有谁能帮我搬一下吗?