javascript查询中的String.format

时间:2016-11-02 04:15:35

标签: javascript

我正在尝试将java代码写入javascript。

public static String generateTimeRange( start,  end) {
    return String.format("%02d:%02d-%02d:%02d", start / 60, start % 60, end / 60, end % 60);
}
  

基本上这将返回00:10 - 00:20的时间(如果10和20是参数)

我想在javascript中编写相同的函数但是很难。有人可以帮忙吗?

function generateTimeRange( start,  end) {
    return String.format("{0}:{1}-{2}:{3}", start / 60, start % 60, end / 60, end % 60);
}

由于javascript没有String.format,我使用了以下代码:

if (!String.format) {
  String.format = function(format) {
    var args = Array.prototype.slice.call(arguments, 1);
    return format.replace(/{(\d+)}/g, function(match, number) { 
      return typeof args[number] != 'undefined'
        ? args[number] 
        : match
      ;
    });
  };
}

但有点打印以下

generateTimeRange(10,20);
"0.16666666666666666:10-0.3333333333333333:20"

看起来我没有做%02d。我如何在javascript中执行此操作?

由于

4 个答案:

答案 0 :(得分:1)

javascript es6引入了可以解决问题的字符串模板。

function _pad(_n, width) {
  const z = '0';
  const n = _n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n
}

function formatTime(start, end) {
  const minStart = _pad(parseInt(start / 60), 2)
  const secStart = _pad(start % 60, 2)
  const minEnd = _pad(parseInt(end / 60), 2)
  const secEnd = _pad(end % 60, 2)
  
  return `${minStart}:${secStart}-${minEnd}:${secEnd}`
}

console.log(formatTime(100, 120)) // 01:40-02:00
console.log(formatTime(60, 61)) // 01:00-01:01

答案 1 :(得分:1)

您可以只返回一个连接字符串,或者可以使用http://site.mockito.org/mockito/docs/current/org/mockito/stubbing/Answer.html

执行此操作

function generateTimeRange(start, end) {
  return Math.floor(start / 60) + ":" + Math.floor(start % 60) + "-" + Math.floor(end / 60) + ":" + Math.floor(end % 60);
}

function generateTimeRangeInterpolation(start, end) {
  var sPrefix = Math.floor(start / 60),
    start = Math.floor(start % 60),
    ePrefix = Math.floor(end / 60),
    end = Math.floor(end % 60);

  return `${sPrefix}:${start}-${ePrefix}:${end}`
}

console.log(generateTimeRange(10, 20));
console.log(generateTimeRangeInterpolation(10, 20));

答案 2 :(得分:1)

填充零,对吗?我从这个post

中使用了这个

String.prototype.zer0Pad = function(pad, siz) {
  var str = this;
  var len = parseInt(siz, 10);
  while (str.length < len) {
    str = pad + str;
  }
  return str;
}

var number = '7';
var digits = '2';
var padding = '0';

var result1 = number.zer0Pad(padding, digits);

var string = '42';

var result2 = string.zer0Pad(0, 4);

console.log('result1: ' + result1 + '\nresult2: ' + result2);

答案 3 :(得分:0)

我猜问题会改变如何制作固定长度的数字。 你可以使用substr:

function(num) { ( "00" + parseInt(num)).substr(-2); }