Как отформатировать валюту и время в javascript - PullRequest
0 голосов
/ 15 марта 2020

Я не могу заставить мое форматирование валюты и времени работать.

Валюта должна возвращать как минимум одно целое число слева от десятичной дроби и два справа и запятую:

не цифры c (a, a1, a1.00) и 0 -> 0,00

1 -> 1,00

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 (или если: цифры c например, 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);
}

Ответы [ 2 ]

1 голос
/ 15 марта 2020

Для вывода желаемого номера валюты вам необходимо использовать следующие методы:

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>
0 голосов
/ 15 марта 2020

Имена функций вводят в заблуждение, они не проверяют значение, они просто форматируют его.

Для форматирования в качестве валюты вы можете использовать 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))); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...