用于safari浏览器的toLocaleString()的替代方案

时间:2015-07-21 10:14:57

标签: javascript jquery

我正在使用此代码将数字转换为字符串:

ProductsData[0]['price'].toLocaleString();

我得到了被驱逐的输出:

8,499

但是相同的代码不适用于 Safari

请给我同样的建议.........

2 个答案:

答案 0 :(得分:0)

虽然SELECT COUNT(`id`) FROM `table` WHERE `ratio` = 1 AND `id` < (SELECT `id` FROM `table` WHERE `ratio` != 1 ORDER BY `id` ASC LIMIT 0, 1) (没有参数)适用于所有主流浏览器,但不幸的是,从一个浏览器到另一个浏览器的行为是不一致的。

如果一致的日期/时间格式很重要,我担心您需要建立自己的toLocaleString版本或使用库。以下是一对值得研究的夫妇:

答案 1 :(得分:0)

今天我在使用这个功能的(几乎完整的)网站上遇到了这个问题,并且偶然发现了你的问题(Safari没有显示任何货币和/或数千/小数分隔符)。我写了一个小的覆盖函数来弹出并修复toLocaleString以满足我的需求(在欧洲和欧元(€))。

希望这可以帮助其他人遇到同样的问题。

(function() {
    Number.prototype._toLocaleString = Number.prototype.toLocaleString;
    Number.prototype.toLocaleString = function(locales,options) {
        if(options.style == "currency") {     // only format currencies.
            var prepend = "";
            if(options.currency == "EUR") {
            prepend = "\u20AC ";     // unicode for euro.
            }
            var val = this;
            val = val;
            
            // check if the toLocaleString really does nothing (ie Safari)
            
            var tempValue = val._toLocaleString(locales,options);
            if(tempValue == val.toString()) { // "broken"
            return prepend+val.formatMoney(2); // <-- our own formatting function.
            } else {
            return tempValue;
            }
        } else {
        return this._toLocaleString(locales,options);
        }
    };
    
    Number.prototype.formatMoney = function(c, d, t){
    var n = this, 
    c = isNaN(c = Math.abs(c)) ? 2 : c, 
    d = d == undefined ? "," : d, 
    t = t == undefined ? "." : t, 
    s = n < 0 ? "-" : "", 
    i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))), 
    j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
     };
   
    // demonstration code
    var amount = 1250.75;
    var formattedAmount = amount.toLocaleString('nl-NL', {style:'currency',currency: 'EUR'});
    console.log(formattedAmount);

})();