将秒表时间转换为毫秒(正则表达式)

时间:2011-01-02 03:31:46

标签: php javascript regex time

我正在试图找出将包含时间的字符串转换为整数毫秒的最佳方法。我正在使用一堆preg_match()和一些数组处理的次优方式,但我想知道是否有一种优雅的方式。

这里有一些示例秒表时间(有些实际上不会在秒表上看到,但无论如何都需要转换):

3:34:05.81

34:05

5 (just 5 seconds)

89 (89 seconds)

76:05 (76 minutes, 5 seconds)

毫秒不会超过2位小数。您可以使用PHP或Javascript正则表达式函数给我一个示例。

谢谢!

3 个答案:

答案 0 :(得分:2)

我知道它已经解决..但这只是javascript的一个想法..

String.prototype.sw2ms = function() {
    var a = [86400000, 3600000, 60000, 1000];
    var s = this.split(/\:/g);
    var z = 0;

    while (s.length && a.length)
        z += a.pop() * Number(s.pop());

    return z;
};
alert("3:45:03.51".sw2ms());
alert("10:37".sw2ms());
alert("05.81".sw2ms());
alert("5".sw2ms());

答案 1 :(得分:1)

在这种情况下,我不打算使用 regexp

简单explode(拆分)带有':'的字符串,并执行向后分析 - 你总是有秒(也许是几毫秒)。从array [lastelement](秒)开始,然后是前一个......

例如

在PHP中

function getMilliseconds($input)
{
  $a = explode(':', $input);
  $n = count($a); // number of array items

  $ms = 0; // milliseconds result

  if ($n > 0)
  {
     $b = explode('.', $a[$n-1]);
     if (count ($b) > 1)
     {
       $m = $b[1];
       while (strlen($m) < 3) $m .= '0'; // ensure we deal with thousands
       $ms += $m;
     }
     $ms += $b[0] * 1000;

     if ($n > 1) // minutes
     {
       $ms += $a[$n-2] * 60 * 1000;

       if ($n > 2) // hours
       {
         $ms += $a[$n-3] * 60 * 60 * 1000;
       }
     }
  }
  return $ms;
}

在JavaScript中

(只是PHP到Javascript的转换)

function getMilliseconds(input)
{
  var a = input.split(':');
  var n = a.length; // number of array items

  var ms = 0; // milliseconds result

  if (n > 0)
  {
     var b = a[n-1].split('.');
     if (b.length > 1)
     {
       var m = b[1];
       while (m.length < 3) m += '0'; // ensure we deal with thousands
       ms += m - 0; // ensure we deal with numbers
     }
     ms += b[0] * 1000;

     if (n > 1) // minutes
     {
       ms += a[n-2] * 60 * 1000;

       if (n > 2) // hours
       {
         ms += a[n-3] * 60 * 60 * 1000;
       }
     }
  }
  return ms;
}

答案 2 :(得分:1)

使用正则表达式没有明显的优势:

function parseStopwatchTime(time) {
    var splitTime = time.split(':'), // explode function in PHP
        secs = 0;

    if(time.length < 1 || time.length > 3) {
        return NaN;
    }

    for(var i = 0; i < time.length; i++) {
        secs *= 60;
        secs += +splitTime[i]; // JavaScript's unary plus operator
                               // casts from a string to a number
                               // so that it can safely be added.
    }

    return secs * 1000; // convert from seconds to milliseconds
}

如果您的秒表以天计算(仍然不需要正则表达式),则需要更多代码,但这只需要几小时,几分钟和一小时(分数)。