【问题标题】:time convert to miliseconds bug时间转换为毫秒错误
【发布时间】:2021-06-02 13:33:39
【问题描述】:

我昨天试过了,但是成功了 我得到了这个代码

let str = document.querySelector("#content_value > table:nth-child(2) > tbody > tr > td:nth-child(2) > table:nth-child(11) > tbody > tr:nth-child(10) > td:nth-child(2) > span").textContent;
let timeParts = str.match(/\b(\d\d?):(\d\d?)(?::(\d\d?))?\b/) || [0,0,0];
console.log("Converted to array:", timeParts);
let [, h, m, s] = timeParts.map(str => +str || 0);
let cas = ((h * 60 + m) * 60 + s) * 1000;
console.log(cas);

不幸的是,代码不能将秒转换为毫秒,有人会帮忙吗?

jsfiddle.

是3次(文字)和时间

time
17:45
0:01:08
0:00:10

时分秒这三个值需要转换成毫秒

这段代码可以工作几小时和几分钟,但不能工作几秒钟

[在此处输入图片描述][2]

[在此处输入图片描述][3]

[2]:https://i.stack.imgur.com/nDdYh.png这个作品 [3]:https://i.stack.imgur.com/8FTuJ.png 秒不工作(18 秒是 18000+1min 60000 (78000))脚本给 1000

<span class="inactive"><span>Suroviny jsou k dispozici za <span class="">0:00:10</span></span><span

function toms(str) {
  let timeParts = str.match(/\b(\d\d?):(\d\d?)(?::(\d\d?))?\b/) || [0,0,0,0];
  let [, h, m, s] = timeParts.map(str => +str || 0);
  let cas = ((h * 60 + m) * 60 + s) * 1000;
  return cas;
}

["1:02", "Suroviny jsou k dispozici za 0:01:35Suroviny jsou k dispozici.", "None"].forEach(str => console.log(str, toms(str)))

【问题讨论】:

  • 您正在做几件事:1) 在 DOM 中查找一些文本 2) 将文本解析为时间分量 3) 转换为毫秒。请进行一些故障排除(您可以使用浏览器调试器或 console.log,如果您觉得更舒服的话)来找出哪个部分不工作。
  • 这里多了一个逗号。 let [, h, m, s] = timeParts.map(str =&gt; +str || 0);。在分配给h 之前。删除那个逗号,它就可以工作了。 let [h, m, s] = timeParts.map(str =&gt; +str || 0);
  • link 3 次是@ÁlvaroGonzález
  • @Chin.Udara 0: 这次 (0:01:18) "0:01" 1: "0" 2: "01" (第二个是 3: undefined ) 这是我的问题
  • @Chin.Udara “额外的逗号”用于丢弃不需要的值。

标签: javascript


【解决方案1】:

错误是你的正则表达式不匹配,你得到你默认的[0,0,0]数组,但是当分配给hms时,你扔掉第一个元素,你得到undefined 在 s.

function toms(str) {
  let timeParts = str.match(/\b(\d\d?):(\d\d?)(?::(\d\d?))?/) || [0,0,0,0];
  let [, h, m, s] = timeParts.map(str => +str || 0);
  let cas = ((h * 60 + m) * 60 + s) * 1000;
  return cas;
}

["1:02", "1:02:03", "Suroviny jsou k dispozici za 0:01:35Suroviny jsou k dispozici.", "None"].forEach(str => console.log(str, toms(str)))

【讨论】:

  • 可以要功能码吗?谢谢@some
  • [0,0,0] 更改为[0,0,0,0],然后看看你在h、m、s 中得到了什么:) 因为你有timeParts.map(str =&gt; +str || 0),所以undefined 将被转换为0。
  • 60000 和 18 秒忽略了同样的问题 Suroviny jsou k dispozici za 0:00:10
  • 如果你的字符串是“0:01”,你会从正则表达式中得到["0:01", "0", "01", undefined],但是因为你做了let [, h, m, s] = timeParts.map(str =&gt; +str || 0);,所以undefined将被转换为0。
  • 我不知道它会引发错误我可以要求修改整个代码吗? || [0,0,0,0];同样的问题@some
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多