JDE / Julian Time:如何格式化朱利安时间戳号

时间:2013-04-12 16:48:49

标签: javascript regex jdedwards

在我的系统中,使用旧的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;
  }
);

2 个答案:

答案 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)

我会告诉你一个线索:

  1. 将返回值转换为数字。
  2. num%100是秒。
  3. (num / 100)%100是分钟。
  4. (num / 10000)是小时。
  5. 如果小时数小于12,请使用AM
  6. 如果小时数为12或更多,则使用PM,如果是13或更多,则减去12。
  7. 另一种方法是将其视为字符串。但是你必须添加足够的前导零以获得长度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());
    });