Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JDE/Julian时间:如何格式化Julian时间戳编号_Javascript_Regex_Jdedwards - Fatal编程技术网

Javascript JDE/Julian时间:如何格式化Julian时间戳编号

Javascript JDE/Julian时间:如何格式化Julian时间戳编号,javascript,regex,jdedwards,Javascript,Regex,Jdedwards,在我的系统中,时间戳是使用旧的IBM julian格式返回的 例如: 凌晨12点0分1秒(午夜后1秒)返回01。 上午12点22分15秒返回2215。 凌晨1点22分15秒返回12215。 上午7点45分1秒返回74501。 下午7点22分15秒返回192215 我需要一个正则表达式将其转换为: 凌晨12点0分1秒(午夜后1秒):00:00.01 12点22分15秒上午:00:22.15 凌晨1点22分15秒:01:22.15 上午7点45分1秒:7:45.01 下午7点22分15秒:19:22

在我的系统中,时间戳是使用旧的IBM julian格式返回的

例如:
凌晨12点0分1秒(午夜后1秒)返回01。
上午12点22分15秒返回2215。
凌晨1点22分15秒返回12215。
上午7点45分1秒返回74501。
下午7点22分15秒返回192215

我需要一个正则表达式将其转换为:
凌晨12点0分1秒(午夜后1秒):00:00.01
12点22分15秒上午:00:22.15
凌晨1点22分15秒:01:22.15
上午7点45分1秒:7:45.01
下午7点22分15秒: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;
  }
);
我给你一个线索:

  • 将返回值转换为数字
  • num%100是秒数
  • (num/100)%100是分钟数
  • (num/10000)是小时数
  • 如果时间少于12小时,则使用AM
  • 如果小时数为12或更多,则使用PM,如果小时数为13或更多,则减去12
  • 另一种方法是将其视为字符串。但是,你必须添加足够的前导零,以达到长度6,然后将其分解为2个字符位,并将每个位转换为一个“int”,这比仅仅修改100和跳转100和10000要多得多

    这两个数字部分中的值不应大于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());
    });
    
    我给你一个线索:

  • 将返回值转换为数字
  • num%100是秒数
  • (num/100)%100是分钟数
  • (num/10000)是小时数
  • 如果时间少于12小时,则使用AM
  • 如果小时数为12或更多,则使用PM,如果小时数为13或更多,则减去12
  • 另一种方法是将其视为字符串。但是,你必须添加足够的前导零,以达到长度6,然后将其分解为2个字符位,并将每个位转换为一个“int”,这比仅仅修改100和跳转100和10000要多得多

    这两个数字部分中的值不应大于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());
    });
    

    以下内容适用于您的示例,但除此之外,我还没有对其进行测试

    //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

    保持一致,但下面的例子适用于您的例子,尽管除此之外我还没有对它进行测试

    //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

    为什么我否决了这个问题:01:01:01是如何返回的?仅使用regex是不够的。现有资源可以轻松回答您的问题:时间元素来自JDE ERP系统。它不是一个系统朱利安格式。在JDE的wisom(???)中,他们决定将所有日期转换为人类可读的数字,并构建内部类来管理这些日期。例如,2013年4月12日存储为113102。1-->13@AlexW添加将不起作用,因为它们不是自某个基准时间以来经过的秒数。我在回答中添加了一些关于传入格式的信息。为什么我否决了这个问题:01:01:01是如何返回的?仅使用正则表达式是不够的。现有资源可以轻松回答您的问题:时间元素来自JDE ERP系统。它不是一个系统朱利安格式。在JDE的wisom(???)中,他们决定将所有日期转换为人类可读的数字,并构建内部类来管理这些日期。例如,2013年4月12日存储为113102。1-->13@AlexW添加将不起作用,因为它们不是自某个基准时间以来经过的秒数。我已经在回答中添加了一些关于传入格式的信息。分和秒仅为59。李·马多,非常感谢,这会让我走的。我走上了做子串的可怕道路,结果变得太难看了。谢谢大家!相信我!如果传入的格式如我所相信的那样,它将起作用。我认为在任何情况下,仅数值计算都不是正确的答案。我们在这里处理的是IEEE-754“双精度”浮点值。后来OP明确了格式;我看不出您在处理“年”和“年中日”组件。我只询问ERP提供的时间元素,我在日期格式(Julian day,而不是Julian date)上面提到过。我为这一混乱道歉。我的小问题的解决方法在上面有详细说明。分秒只到59。李·马多,非常感谢,这会让我走的。我正走在那条可怕的做子串的道路上