gpt4 book ai didi

javascript - 使用 JavaScript 转换 ISO 8601 持续时间

转载 作者:可可西里 更新时间:2023-11-01 02:53:43 26 4
gpt4 key购买 nike

如何使用 JavaScript 转换持续时间,例如:

PT16H30M

最佳答案

理论上,您可以获得如下所示的 ISO8601 持续时间:

P1Y4M3W2DT10H31M3.452S

我编写了以下正则表达式来将其解析为组:

(-)?P(?:([.,\d]+)Y)?(?:([.,\d]+)M)?(?:([.,\d]+)W)?(?:([.,\d]+)D)?T(?:([.,\d]+)H)?(?:([.,\d]+)M)?(?:([.,\d]+)S)?

它并不漂亮,精通正则表达式的人可能会写出更好的正则表达式。

这些组归结为以下几类:

  1. 签名
  2. 天数
  3. 营业时间
  4. session 记录

我编写了以下函数将其转换为一个漂亮的对象:

var iso8601DurationRegex = /(-)?P(?:([.,\d]+)Y)?(?:([.,\d]+)M)?(?:([.,\d]+)W)?(?:([.,\d]+)D)?T(?:([.,\d]+)H)?(?:([.,\d]+)M)?(?:([.,\d]+)S)?/;

window.parseISO8601Duration = function (iso8601Duration) {
var matches = iso8601Duration.match(iso8601DurationRegex);

return {
sign: matches[1] === undefined ? '+' : '-',
years: matches[2] === undefined ? 0 : matches[2],
months: matches[3] === undefined ? 0 : matches[3],
weeks: matches[4] === undefined ? 0 : matches[4],
days: matches[5] === undefined ? 0 : matches[5],
hours: matches[6] === undefined ? 0 : matches[6],
minutes: matches[7] === undefined ? 0 : matches[7],
seconds: matches[8] === undefined ? 0 : matches[8]
};
};

这样使用:

window.parseISO8601Duration('P1Y4M3W2DT10H31M3.452S');

希望这对外面的人有帮助。


更新

如果您使用 momentjs , 它们具有可用的 ISO8601 持续时间解析功能。你需要一个 plugin to format它,并且它似乎不处理在撰写本说明时指定的期间内有几周的持续时间。

关于javascript - 使用 JavaScript 转换 ISO 8601 持续时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14934089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com