代码之家  ›  专栏  ›  技术社区  ›  Glyn

如何在javascript中格式化货币和时间

  •  0
  • Glyn  · 技术社区  · 6 年前

    我无法获取货币格式和工作时间。

    Currency是在小数点左边返回至少一个整数,在右边返回两个整数,并使用逗号:

    非数字(a、a1、a1.00)和0-->0

    1-->1

    1.1-->1.10

    9999-->9,999.00

    我有:

    $("#addCostpp").blur( function(){
        $("#addCostpp").val(validateCost($(this).val()));
    });
    
    
    function validateCost(cost_amount){
        return cost_amount.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/, '$1,$2$3')
    }
    

    时间是00:00返回:

    0(或错误,例如a或aa)-->00:00

    1-->01:00

    01-->01:00

    01:0-->01:00(或如果:是任何非数字,例如01;0或01L0)

    0101-->01:01

    010203-->01:02

    $("#addTimeOpen").blur( function(){
        $("#addTimeOpen").val(validateTime($(this).val()));
    });
    
    function validateTime(timeString){
        var formatted = "";
    
        if (timeString.match(/^0/)){
            formatted = timeString.replace(/(\d{2})(\d{2})/, "$1:$2");
        }else{
            formatted = timeString.replace(/(\d{1})(\d{2})/, "0$1:$2");
        }
    
        //update
        return(formatted);
    }
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Robin Hossain    6 年前

    对于您想要的货币编号输出,您需要使用以下方法:,

    new Intl.NumberFormat('en-IN', {minimumFractionDigits: 2})
    

    以及你需要使用的时间格式 moment.js 按照下面的方式,

    moment('010203', 'H:mm:ss').format('HH:mm')
    

    要根据您的期望输出格式化货币,您需要使用 Intl.NumberFormat 具有的函数 minimumFractionDigits = 2 参数

    我添加了一个代码截取,我格式化了你的愿望输出在以下截取。

    var formatter = new Intl.NumberFormat('en-IN', {minimumFractionDigits: 2});
    
    var input1 = document.getElementById('input1').innerHTML;
    var input2 = document.getElementById('input2').innerHTML;
    var input3 = document.getElementById('input3').innerHTML;
    
    
    document.getElementById('result1').innerHTML = formatter.format(input1);
    document.getElementById('result2').innerHTML = formatter.format(input2);
    document.getElementById('result3').innerHTML = formatter.format(input3);
    
    
    function formatTime( cTime ){
    var formattedTime;
      if(cTime.length === 1 || cTime.length === 2){
        formattedTime = moment(cTime, 'H').format('HH:mm');
      }else if(cTime.length === 3 || cTime.length === 4){
        formattedTime = moment(cTime, 'H:mm').format('HH:mm');
      }else if(cTime.length > 4){
        formattedTime = moment(cTime, 'H:mm:ss').format('HH:mm');
      }
      return formattedTime;
    }
    
    var time1 = document.getElementById('time1').innerHTML;
    var time2 = document.getElementById('time2').innerHTML;
    var time3 = document.getElementById('time3').innerHTML;
    var time4 = document.getElementById('time4').innerHTML;
    var time5 = document.getElementById('time5').innerHTML;
    
    document.getElementById('result_time1').innerHTML = formatTime(time1);
    document.getElementById('result_time2').innerHTML = formatTime(time2);
    document.getElementById('result_time3').innerHTML = formatTime(time3);
    document.getElementById('result_time4').innerHTML = formatTime(time4);
    document.getElementById('result_time5').innerHTML = formatTime(time5);
    p{
      margin-top: 20px;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
    <p>
    <span id="input1">1</span>  <br><span id="result1"></span>
    </p>
    
    <p>
      <span id="input2">1.1</span>  <br><span id="result2"></span>
    </p>
    
    <p>
    <span id="input3">9999</span>  <br><span id="result3"></span>
    </p>
    
    
    
    <p>
      <span id="time1">1</span> <br> <span id="result_time1"></span>
    </p>
    
    <p>
      <span id="time2">01</span> <br> <span id="result_time2"></span>
    </p>
    
    <p>
      <span id="time3">01:0</span> <br> <span id="result_time3"></span>
    </p>
    
    <p>
      <span id="time4">0101</span> <br><span id="result_time4"></span>
    </p>
    
    <p>
      <span id="time5">010203</span> <br> <span id="result_time5"></span>
    </p>
        2
  •  0
  •   RobG    6 年前

    函数名有误导性,它们不验证值,只是格式化了它。

    要格式化为货币,可以使用 Intl.NumberFormat 带或不带货币符号。它可以通过 toLocaleString :

    [1, 10000, 1.23e4, 1.2].forEach(v => console.log(
      // With currency a symbol
      v + ' -> ' + v.toLocaleString('en',{style: 'currency', currency: 'JPY'}) + '\n' +
      // As number
      v + ' -> ' + v.toLocaleString('en',{minimumFractionDigits: 2, maximumFractionDigits: 2})
      )
    );

    使用字符串方法来设置所需时间的格式非常简单:

    function formatTime(v) {
      v = String(v).replace(/\D/g,'').padStart(2, '0').padEnd(4, '0');
      return v.substring(0,2) + ':' + v.substring(2,4);
    }
    
    ['1','01','0101','010203','foobar', NaN].forEach(s => console.log(s + ' -> ' + formatTime(s)));