Javascript 将字符串(HH:mm)转换为日期并打印自定义格式(在x分钟内到达)

Javascript 将字符串(HH:mm)转换为日期并打印自定义格式(在x分钟内到达),javascript,regex,date,time,substring,Javascript,Regex,Date,Time,Substring,我有一个javascript: var data = '<Message>Fermata 1494 - Linea R2 -> 14:01 Linea 202 -> 14:06 </Message>'; var arr = data.match(/[\w\d]+\s*->\s*[\d:]+/g); alert(arr); for(var i=0; i < arr.length; i++) { arr[i] = arr[i].replace

我有一个javascript:

var data = '<Message>Fermata 1494 -  Linea R2 -> 14:01  Linea 202 -> 14:06   </Message>';
var arr = data.match(/[\w\d]+\s*->\s*[\d:]+/g);
alert(arr);
for(var i=0; i < arr.length; i++) { 
arr[i] = arr[i].replace('->', 'at');
arr[i] = arr[i]+'\n';
}
arr = arr.join('');
console.log(arr);
var数据='Fermata 1494-Linea R2->14:01 Linea 202->14:06';
var arr=data.match(/[\w\d]+\s*->\s*[\d:]+/g);
警报(arr);
对于(var i=0;i',at');
arr[i]=arr[i]+'\n';
}
arr=arr.join(“”);
控制台日志(arr);
它获取格式化页面并打印以下信息:

R2在14:01
14:06时202分

jsfiddle:

我需要打印

R2 14:01-在x分钟内到达
格式


因此,我需要在当前时间戳中转换字符串的“14:01”部分,然后进行减法运算,但在纯javascript中,似乎无法进行减法运算,没有jquery。

假设日期是今天,您可以这样构造日期字符串:

var today =new Date();
var dateStr=today.getFullYear()+'-'+(today.getMonth()+1)+'-'+today.getDate()
            +" 14:01"+ ":00"; // attach hh:mm

应该接近这个。有点棘手,因为我不知道它是如何在午夜滚动的

function handleMessage(message) {
    var now = new Date();
    var list = message.match(/[\w\d]+\s*->\s*[\d:]+/g);
    var result = list.map(function(entry) {
        return handleEntry(entry, now);
    }).join("\n");

    alert(result);
}

function handleEntry(entry, now) {
    var parts = entry.split(" -> ");
    var line = parts[0];
    var time = parts[1];

    var minutesToGo = getMinutesToGo(time, now);

    return ("Line " + line + " arrives in " + minutesToGo + " minutes");
}

function getMinutesToGo(time, now) {
    var parts = time.split(":");
    var timeMinutes = (parseInt(parts[0]) * 60) + parseInt(parts[1]);
    var nowMinutes = (now.getHours() * 60) + now.getMinutes();
    var oneDayMinutes = 24 * 60;

    return (oneDayMinutes + timeMinutes - nowMinutes) % oneDayMinutes;
}

var message = '<Message>Fermata 1494 -  Linea R2 -> 14:01  Linea 202 -> 14:06   </Message>';

handleMessage(message);
函数句柄消息(消息){
var now=新日期();
var list=message.match(/[\w\d]+\s*->\s*[\d:]+/g);
var result=list.map(函数(条目){
返回handleEntry(输入,现在);
}).加入(“\n”);
警报(结果);
}
函数handleEntry(输入,现在){
变量部分=分录。拆分(“->”);
var线=零件[0];
var时间=零件[1];
var minutesToGo=getMinutesToGo(时间,现在);
返回(“行”+Line+“在”+minutesToGo+分钟内到达”);
}
函数getMinutesToGo(时间,现在){
var parts=time.split(“:”);
var timeMinutes=(parseInt(parts[0])*60)+parseInt(parts[1]);
var nowMinutes=(now.getHours()*60)+now.getMinutes();
var oneDayMinutes=24*60;
返回(oneDayMinutes+timeMinutes-nowMinutes)%oneDayMinutes;
}
风险值信息='Fermata 1494-Linea R2->14:01 Linea 202->14:06';
handleMessage(消息);

您最初的时间格式是什么,日期还是仅仅是hh:mm(14:01)?(date1.getmillizes()-date2.getmillizes())/(60*1000)可以给出两个时间戳的分钟差。@Danyu感谢您的回复,我只有一个字符串,正如我在上面写的“R2 at 14:01”所以我需要把它转换成日期格式。忘记你所有的烦恼吧:这个解决方案非常适合我的需要!感谢午夜编码器,您的代码即使在午夜也能正常运行!:很高兴听到这个。请投赞成票;-)我很想这么做,但我在声誉方面得了9分:(很抱歉再次打扰您@robby,但正如您在这篇文章中看到的,它会对每个条目发出警报。我想同时输出字符串,例如Linea R2 xx分钟Linea R1 xx分钟等等..似乎我需要进行迭代,但我找不到位置…谢谢!现在它工作得很好!当达到15个声誉时,我会记得更新投票。)欧点!