javascript - 使用 moment.js (时区)时以 ("YYYY-MM-DD HH:mm") 格式返回日期和时间

标签 javascript angularjs datetime timezone momentjs

我正在使用时刻时区,因此我可以从选定的时区转换为客户端的时区。

我无法以比这更好的方式实现它:

convertSelectedTimeZoneToClients() {
    let timeZoneInfo = {
        usersTimeZone: this.$rootScope.mtz.tz.guess(),
        utcOffset: this.formData.timeZone.offset,
        selectedDateTime: this.toJSONLocal(this.formData.sessionDate) + " " + this.formData.sessionTime 
    };

    let utcTime = this.$rootScope.mtz.utc(timeZoneInfo.selectedDateTime).utcOffset(timeZoneInfo.utcOffset).format("YYYY-MM-DD HH:mm");
    let convertedTime = this.$rootScope.mtz.tz(utcTime, timeZoneInfo.usersTimeZone).format("Z");
    return convertedTime;
}

所以基本上我使用 usersTimeZone: this.$rootScope.mtz.tz.guess(),guess() 函数从浏览器中找出时区。 然后,我从日期时间选择器和下拉列表中获取值,并使用 utcOffset 将它们转换为 UTC 值。 最后我想将该 utc 值转换为用户时区值。

我得到这样的对象:

enter image description here

_d表示转换后的正确值。我尝试在 ConvertedTime 变量上添加一堆不同的 .format() 模式,但我无法以这种格式检索时间:“YYYY-MM-DD HH:mm”。我想它的工作方式与使用 .utcOffset() 函数时不同。

有人可以帮我解决这个问题吗?

最佳答案

您无需猜测客户端时区即可转换为本地时间。只需使用local函数即可。

例如:

moment.tz('2016-01-01 00:00', 'America/New_York').local().format('YYYY-MM-DD HH:mm')

对于位于太平洋时区的用户,此操作会从东部时区转换为太平洋时区,并且您会得到输出字符串 “2015-12-31 21:00”。对于其他时区的用户,输出会有所不同,正如预期的那样。

您不需要格式化为字符串并重新解析它,也不需要手动操作 UTC 偏移量。这几乎是没有道理的。

关于javascript - 使用 moment.js (时区)时以 ("YYYY-MM-DD HH:mm") 格式返回日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40405057/

相关文章:

javascript - 如何为不同的ID分别运行相同的功能

javascript - Angular 属性指令 - 在当前指令下方添加 ng-repeat

php - viewmanager php中的日期形成

ruby-on-rails - 如何从 created_at 列中仅提取年份

JavaScript search() 方法以两种方式等于零,导致问题

javascript - 更新没有 id 的云 firestore 文档

javascript - 如何在 redux saga 中测试功能选择器?

javascript - 项目索引 ngRepeat AngularJS 上的唯一 html

javascript - AngularJs - 元素被删除/销毁后清理

powershell - 尝试将字符串数组转换为日期