javascript - 在 JavaScript 中转换日期/时间格式

标签 javascript momentjs

我正在使用以 OData v4 格式返回日期/时间的 Web 服务。该格式如下所示:yyyy-MM-ddTHH:mm:ss.fffZ。这意味着当前时间将返回为:“2016-05-11T03:08:00Z”。

我在一些客户端 JavaScript 中收到了这个日期。我正在尝试使用 Moment.js 格式化日期图书馆。据我了解,该库寻找 ISO 8601 formatted string .

我的问题是,如何将获得的 OData v4 字符串转换为 ISO 8601 格式的字符串?或者,如何将 OData v4 字符串加载到 moment 对象中?我最大的问题似乎是时区。例如:如果我有

2016-06-01T00:00:00Z

然后使用

moment('2016-06-01T00:00:00Z').format('MM/DD/YYYY')

我明白了

05/31/2016

然而,我被期望 06-01-2016

谢谢!

最佳答案

如果您只想将此 UTC 日期解释为本地时间,则无需引入 Moment 时区。只需忽略 z 标记。

 moment('2016-06-01T00:00:00Z', 'YYYY-MM-DDTHH:mm:ss').format()
 "2016-06-01T00:00:00-05:00" //interpreted as -5 because my browser is central

请注意,Intl.DateTimeFormat() 的浏览器支持非常有限:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/resolvedOptions

如果出于某种目的确实需要来自浏览器的时区信息(请记住,如果您只是指浏览器的本地时间,则不需要此信息),您可以使用 moment.tz.guess( )。如果存在,这将使用国际 API,如果不存在,则退回到启发式猜测时区。 http://momentjs.com/timezone/docs/#/using-timezones/guessing-user-timezone/

作为衡量标准,如果您希望将该日期解释为 UTC 并将其显示为 UTC,您可以使用 utc 函数:

moment.utc('2016-06-01T00:00:00Z').format()
"2016-06-01T00:00:00Z" //z for UTC, but displayed with expected date and time

关于javascript - 在 JavaScript 中转换日期/时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37172415/

相关文章:

javascript - 如何配置 grunt-contrib-uglify 以在保留目录结构的同时缩小文件

javascript - 如何转换字符串 (01/02/2013 22 :13) to date in javascript

javascript - 使用 Moment,js 获取一个月中的所有星期一日期

momentjs - 如何处理momentjs中的弃用警告

javascript - Moment Timezone JS,返回 Javascript 日期

javascript - 使用 prettier 时出现错误 'No files matching the pattern were found'

javascript - 将 html 文本定位并转换为父元素的类

javascript - 在 Canvas 上平滑地将对象从 A 移动到 B

javascript - moment js自定义日期格式转换出错

javascript - 需要使用 momentjs 将时间转换为日期的帮助