【问题标题】:Converting date formats without timezone conversion?在没有时区转换的情况下转换日期格式?
【发布时间】:2021-09-19 22:15:42
【问题描述】:

我正在尝试在不向我的项目中添加 moment js 的情况下做到这一点,但这似乎比我想要的要困难。

如果我得到的日期格式为:“2021-07-19T12:15:00-07:00”

是否有一种有效的方法将其格式化为: “下午 12 点 15 分”

无论我和我的浏览器位于何处?

我已经得到了一些其他没有运气的答案,例如:

var date = new Date('2021-07-19T12:15:00-07:00')
var userTimezoneOffset = date.getTimezoneOffset() * 60000;
new Date(date.getTime() - userTimezoneOffset);

谢谢!

【问题讨论】:

  • 这能回答你的问题吗? How to format a JavaScript date?
  • @zr0gravity7 不幸的是没有
  • @0stone0 很遗憾没有
  • 在遵守夏令时的地方将随机时间戳视为本地时间戳是有问题的。在更改为 DST 时,有 30 分钟到 1 小时不存在,而在更改回时,有一个类似的时间段存在两次。因此,您需要实施一个规则来涵盖这些情况,因为不同的实施可能会以不同的方式解决问题。

标签: javascript date data-conversion


【解决方案1】:

您可以使用Date.toLocaleTimeString() 来格式化时间,这将为您提供当地时区的时间,如果我们删除了 UTC 偏移量。

这里还有其他选项:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat

let timestampWithUTCOffset = "2021-07-19T12:15:00-07:00";
let timestampWithoutUTCOffset = timestampWithUTCOffset.substr(0,19);

console.log( { timestampWithUTCOffset , timestampWithoutUTCOffset });
let dt = new Date(timestampWithoutUTCOffset);
console.log('Time of day:', dt.toLocaleTimeString('en-US', { timeStyle: 'short' }))

【讨论】:

  • 当使用 OP 在他的问题中显示的日期调用时,这将显示 9:15 PM2021-07-19T12:15:00-07:00
  • substr 是否有可能偏离 1?
  • 我觉得应该是对的,只是加了个log语句来展示一下!起始索引为 0,长度为 19 个字符。
猜你喜欢
  • 1970-01-01
  • 2022-11-12
  • 2020-06-02
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
  • 2015-08-27
相关资源
最近更新 更多