如何在 javascript 中从这个字符串中提取时间?

问题描述 投票:0回答:4

我有这个字符串

var data = "Mon 08:30am - 04:30pm"

我需要这种形式

//expected String remove am pm and convert pm timing into 24 hrs time format
Result = 8:30-16:30

我如何在 Javascript 中使用 Regex 来做到这一点。我尝试使用子字符串,但这不是正确的方法。

我用这个试过,但没有找到正确的方法

var amHourFrom = parseInt(details[0].data.substring(4, 2)));    
var amMinuteFrom = parseInt(details[0].data.substring(7,2)));   
var pmHourFrom = parseInt(details[0].data.substring(14, 2)));   //04
var pmMinuteFrom = parseInt(details[0].data.substring(17,2)));  //30

if(details[0].data.substring(19,2)=="pm"){
{pmHourFrom = hourFrom +12;     //04+12 = 16    
}
var Str= amHourFrom + ":" + amMinuteFrom "-" + pmHourFrom+ ":" + pmMinuteFrom;
var result = Str.replace(/^(?:00:)?0?/, '');

我想用其他方式做

javascript regex string time regex-group
4个回答
3
投票

我们可以尝试下面的正则表达式替换方法:

var data = "Mon 08:30am - 04:30pm";
var times = data.replace(/(\d{2}):(\d{2})([ap]m)/g, (m, x, y, z) => z === "am" ? x + ":" + y : "" + (12 + parseInt(x)) + ":" + y)
                .match(/\d{2}:\d{2}/g)
                .join("-");
console.log(times);

replace()
的第一个链式调用通过在
pm
次的情况下增加 12 小时将小时分量转换为 24 小时时间。然后我们找到所有时间匹配项,并在最终字符串输出中通过破折号连接在一起。


0
投票

假设您想坚持当前的实现(有效,只是代码中有各种错误),这是一个工作版本:

    var data = "Mon 08:30am - 04:30pm";

    var amHourFrom = parseInt(data.substring(4, 6));    
    var amMinuteFrom = parseInt(data.substring(7,9));   
    var pmHourFrom = parseInt(data.substring(14, 16));  
    var pmMinuteFrom = parseInt(data.substring(17,19));  

    if(data.substring(19,21)=="pm"){
        pmHourFrom += 12;
    }
    var str= amHourFrom + ":" + amMinuteFrom + "-" + pmHourFrom+ ":" + pmMinuteFrom;

0
投票
  1. 由于天数总是三个字符的长度,您可以简单地从索引 4(
    day
    名称后的空格)开始分割字符串。
  2. -
    分割字符串。
  3. 然后通过一个一个地传递时间来简单地转换时间,然后用
    -
    加入它们。

这里是演示-

var data = "Mon 08:30am - 04:30pm"
var time = data.slice(4).replace(/ /g, '').split('-');

const convertTime = timeStr => {
   const time = timeStr.match(/\d+\:\d+/g).join("")
   const modifier = timeStr.match(/[a-z]+/gi).join("");
   let [hours, minutes] = time.split(':');
   if (hours === '12') {
      hours = '00';
   }
   if (modifier.toLowerCase() === 'pm') {
      hours = parseInt(hours, 10) + 12;
   }
   return `${hours}:${minutes}`;
};

let value1 = convertTime(time[0]) + " - " + convertTime(time[1])
console.log(value1)

如果字符串是动态的,请告诉我。


0
投票

我目前没有添加 12 的简单和简短的解决方案,但是要使用 Regex 转换数据,您可以使用这个

var result = data.replace(/[^0-9:-]/g, "");

除了括号中的字母外,所有字符都没有替换。

© www.soinside.com 2019 - 2024. All rights reserved.