javascript 中的自定义输出

custom output in javascript

我有在祖鲁语中生成时间的代码。现在我希望它有多个输出选项,但方法很简单。有没有更快的方法:

function zuluTime(format) {
    if(!format) { return false; }

    format      = format.toLowerCase();
    zuluDate    = new Date();

    zuluHour    = zuluDate.getUTCHours();
    zuluMin     = zuluDate.getUTCMinutes();
    zuluSec     = zuluDate.getUTCSeconds();

    zuluHour    = (zuluHour <= 9) ? '0'+zuluHour : zuluHour;
    zuluMin     = (zuluMin  <= 9) ? '0'+zuluMin  : zuluMin;
    zuluSec     = (zuluSec  <= 9) ? '0'+zuluSec  : zuluSec;
    zuluTenths  = Math.floor((zuluSec / 60) * 10)
    zulu        = '<span>Z</span';

    if(format == 'hhmmss')  { time = (zuluHour+':'+zuluMin+':'+zuluSec+zulu);           }
    if(format == 'hhmm')    { time = (zuluHour+''+zuluMin+zulu);                        }
    if(format == 'hhmm.s')  { time = (zuluHour+''+zuluMin+'.'+zuluTenths+''+zulu);      }

    return time;
}

是否可以制作一些功能来识别格式是否包含 hh.s,例如,而不必 if else?

您可以在 String.prototype.replace 中使用 RegExp 并将函数作为第二个 argument

var re = /hh|mm|ss|s/g,
        map = {
        hh: zuluHour,
        mm: zuluMin,
        ss: zuluSec,
        s: zuluTenths
    };
function replacor([=10=]) {
    if ([=10=] in map)
        return map[[=10=]];
    return [=10=];
}

time = format.replace(re, replacor);

此方法很容易扩展以允许更多变量,并且适用于任何 "formatting",例如Thh:mm:ssZ 将变为 T16:31:58Z,即使您没有使用列表来教它针对特定格式做什么。

如果 hhmmss 等于 hh:mm:ss,您需要先将此转换应用于 format