我正在试图找出将包含时间的字符串转换为整数毫秒的最佳方法。我正在使用一堆preg_match()和一些数组处理的次优方式,但我想知道是否有一种优雅的方式。
这里有一些示例秒表时间(有些实际上不会在秒表上看到,但无论如何都需要转换):
3:34:05.81
34:05
5 (just 5 seconds)
89 (89 seconds)
76:05 (76 minutes, 5 seconds)
毫秒不会超过2位小数。您可以使用PHP或Javascript正则表达式函数给我一个示例。
谢谢!
答案 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
}
如果您的秒表以天计算(仍然不需要正则表达式),则需要更多代码,但这只需要几小时,几分钟和一小时(分数)。