在我的系统中,使用旧的IBM julian格式返回时间戳。
例如:
12点0分1秒AM(午夜后1秒)返回01
12点22分15秒AM返回2215
1点22分15秒AM返回12215
7点45分1秒AM返回74501
7点22分15秒PM返回192215.
我需要一个正则表达式来将它们放入以下格式:
12点0分1秒AM(午夜后1秒):00:00.01
上午12点22分15秒AM:00:22.15
1点22分15秒AM:01:22.15
7点45分1秒AM:7:45.01
7点22分15秒PM:19:22.15
感谢任何帮助。
解 感谢MikeM,这是解决方案:
//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';
time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
function ( all, hr1, hr2, min, sec ) {
return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
}
);
答案 0 :(得分:2)
以下内容适用于您的示例,但我尚未对其进行测试
//var time = '01';
//var time = '2215';
//var time = '12215';
//var time = '74501';
var time = '192215';
time = time.replace( /^(?:(?:(\d)?(\d))?(\d\d))?(\d\d)$/,
function ( all, hr1, hr2, min, sec ) {
return (hr1 || '0') + (hr2 || '0') + ':' + (min || '00') + '.' + sec;
}
);
虽然它提供的07:45.01
不是7:45.01
,但却与01:22.15
保持一致。
答案 1 :(得分:1)
我会告诉你一个线索:
另一种方法是将其视为字符串。但是你必须添加足够的前导零以获得长度6然后将其分成2个字符位并将每个转换为'int',这比仅仅修改100并且潜水100和10,000更有效。 / p>
这两个数字部分中的值绝不应超过59。
注意强>
@ radi8注意到我遗漏了一些东西。我应该注意到上述算法中的“/”(除法)必须是整数运算才能正常工作。一些编程语言提供整数运算。 JavaScript没有。
由于JavaScript使用浮点运算,因此他会减去分割前的秒数。然后类似的减去分钟数就可以确定下一步。
你也可以在分割后使用Math.floor()
来完成相同的事情(因为这些是正数)。
这是修改OP的代码:
$(function () {
var val1 = 41215,hr=0,min=0,sec=0;
sec = val1%100;
val1 = Math.floor(val1 / 100);
min = val1%100;
hr = Math.floor(val1 / 100);
// format the result. This example could show 1:1:1 instead of 01:01:01
tst2 = hr.toString()+':'+min.toString()+'.'+sec.toString();
alert(tst2.toString());
});