【问题标题】:8601 ISO String to readable date format in Javascript8601 ISO字符串到Javascript中的可读日期格式
【发布时间】:2016-01-13 18:30:02
【问题描述】:

我在尝试将 8601 转换为可读格式时遇到了非常可怕的事情。日期显示为“P0DT0H0M10S”并存储在名为 timeLeft 的 var 中。我在网上找到的每篇文章都告诉我如何将日期转换为 8601 格式,而不是反过来。

我尝试使用 moment.js,但这似乎围绕当前日期,而不是我的 timeLeft var 设置的日期。如何将此 var 转换为用户友好的格式?谢谢

【问题讨论】:

  • 该字符串看起来不像 ISO 8601 格式。该格式涉及看起来像 2010-01-01T05:06:07 的日期。
  • 这是一个duration format...
  • @epascarello 啊好的。那么在这种情况下,我不确定将持续时间转换为 Date 实例意味着什么。我想你可以得到一个相对于其他日期偏移的日期,我猜这可能是 OP 所说的。
  • @Pointy 你会得到一个从 0 开始的日期(甚至可能是第 0 年第 0 天第 0 时间)。将其添加到今天的日期应该会给您一个合理的未来日期,但这肯定不是最好的解决方案。
  • @ssube 我想你可以,但这不是该格式的含义。我想你可以用它来表示从 1 月 0 日到现在的时间长度:)

标签: javascript date variables time timezone


【解决方案1】:

时刻有一个duration type

var duration = moment.duration('P1Y2M3DT4H5M6S');
// user-friendly format
var out = duration.humanize();

snippet.log(out);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.1/moment.min.js"></script>
<script src="https://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

【讨论】:

    【解决方案2】:

    首先,这不是ISO-8601 date(甚至不是很接近)。

    其次,momentjs does support parsing 一个字符串变成片刻,用moment("20111031", "YYYYMMDD") 语法(来自他们的front page examples)。

    我不确定您需要的模式是什么,但可能类似于 [P]D[DT]H[H]M[M]S[S]

    【讨论】:

    • @epascarello 很好。我将调用语义并说它们仍然不是日期,因此。当与当前日期或其他日期结合使用时,Moment 应该仍然能够解析它们,并且可能能够做一些有意义的事情。
    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 2012-11-22
    • 2018-06-26
    • 2023-03-16
    • 2015-08-10
    • 1970-01-01
    • 2018-02-22
    • 1970-01-01
    相关资源
    最近更新 更多