<頭>
http://code.jquery.com/jquery-1.9.1.min.js">>
<スクリプト>
(関数() {
var チョッパー = ウィンドウ.チョッパー = ウィンドウ.チョッパー || { 文化: {} }、
math = 数学、
formatRegExp = /{(d )(:[^}] )?}/g,
FUNCTION = "関数",
STRING = "文字列",
NUMBER = "数値",
OBJECT = "オブジェクト",
NULL = "null"、
BOOLEAN = "ブール値",
未定義 = "未定義",
スライス = [].スライス,
globalize = window.Globalize,
standardFormatRegExp = /^(n|c|p|e)(d*)$/i,
literalRegExp = /(
\.)|(['][^']*[']?)|(["][^"]*["]?)/g,
commaRegExp = /,/g,
空 = "",
ポイント = ".",
カンマ = ",",
シャープ = "#",
ゼロ = "0"、
プレースホルダー = "??",
EN = "en-US",
objectToString = {}.toString;
//カルチャー
Chopper.cultures["en-US"] = {
名前:EN、
数値形式: {
パターン: ["-n"]、
小数点: 2、
",": ",",
".": ".",
グループサイズ: [3]、
パーセント: {
パターン: ["-n %", "n %"],
小数点: 2、
",": ",",
".": ".",
グループサイズ: [3]、
記号: "%"
}、
通貨: {
パターン: ["($n)", "$n"],
小数点: 2、
",": ",",
".": ".",
グループサイズ: [3]、
記号: "$"
}
}、
カレンダー: {
標準: {
日: {
名前: ["日曜日"、"月曜日"、"火曜日"、"水曜日"、"木曜日"、"金曜日"、"土曜日"]、
名前略語: ["日"、"月"、"火"、"水"、"木"、"金"、"土"],
短い名前: [ "Su"、"Mo"、"Tu"、"We"、"Th"、"Fr"、"Sa" ]
}、
月: {
名前: ["1 月"、"2 月"、"3 月"、"4 月"、"5 月"、"6 月"、"7 月"、"8 月"、"9 月"、"10 月"、"11 月"、"12 月" ]、
名前略語: ["1月"、"2月"、"3月"、"4月"、"5月"、"6月"、"7月"、"8月"、"9月"、"10月"、"11月"、"12月" ]
}、
午前: [ "午前"、"午前"、"午前" ]、
午後: [ "午後", "午後", "午後" ],
パターン: {
d: "月/日/yyyy"、
D: "dddd、MMMM dd、yyyy"、
F: "dddd、MMMM dd、yyyy h:mm:ss tt",
g: "月/日/yyyy h:mm tt",
G: "月/日/yyyy h:mm:ss tt",
m: "MMMM dd",
母: 「MMMM dd」、
s: "yyyy'-'MM'-'ddTHH':'mm':'ss",
t: "h:mm tt",
T: "h:mm:ss tt"、
u: "yyyy'-'MM'-'dd HH':'mm':'ss'Z'",
y: "MMMM、yyyy"、
Y: 「MMMM、yyyy」
}、
"/": "/",
":": ":",
最初の日: 0、
2 桁の最大年数: 2029
}
}
};
function findCulture(culture) {
if (文化) {
if (culture.numberFormat) {
文化を返す;
}
if (文化の種類 === STRING) {
var cultures = Chopper.cultures;
文化を返す[文化] ||文化[culture.split("-")[0]] || null;
}
null を返す;
}
null を返す;
}
function getCulture(culture) {
if (文化) {
文化 = findCulture(文化);
}
文化を返す ||チョッパー.カルチャーズ.カレント;
}
function ExpandNumberFormat(numberFormat) {
数値フォーマット.グループサイズ = 数値フォーマット.グループサイズ;
numberFormat.percent.groupSizes =numberFormat.percent.groupSize;
numberFormat.currency.groupSizes =numberFormat.currency.groupSize;
}
Chopper.culture = function(cultureName) {
var cultures =chopper.cultures, culture;
if (cultureName !== 未定義) {
文化 = findCulture(文化名) ||文化[EN];
culture.calendar = culture.calendars.standard;
cultures.current = 文化;
if (globalize && !globalize.load) {
ExpandNumberFormat(culture.numberFormat);
}
} else {
文化を返す.current;
}
};
チョッパー.カルチャー(EN);
//数値の書式設定
関数 formatNumber(数値、形式、カルチャ) {
文化 = getCulture(文化);
varnumberFormat = culture.numberFormat,
groupSize =numberFormat.groupSize[0],
groupSeparator =numberFormat[COMMA],
10 進数 = 数値形式[ポイント],
精度 = numberFormat.decmals,
pattern =numberFormat.pattern[0],
リテラル = [],
シンボル、
isCurrency、isPercent、
カスタム精度、
形式と精度、
負 = 数値
整数、
分数、
integerLength,
分数の長さ、
置換 = 空、
値 = 空、
idx、
長さ、
ち、
hasGroup、
hasNegativeFormat、
10 進数インデックス、
シャープインデックス、
ゼロインデックス、
hasZero、hasSharp、
パーセントインデックス、
通貨インデックス、
startZeroIndex、
開始 = -1,
終了;
//数値がない場合は空の文字列を返します
if (数値 === 未定義) {
空を返します;
}
if (!isFinite(数値)) {
番号を返します;
}
// 形式がない場合は、number.toString() または culture.name が定義されていない場合はnumber.toLocaleString() を返します
if (!format) {
文化名.名前の長さを返しますか? number.toLocaleString() :number.toString();
}
formatAndPrecision = standardFormatRegExp.exec(format);
// 標準の書式設定
if (formatAndPrecision) {
フォーマット = formatAndPrecision[1].toLowerCase();
isCurrency = フォーマット === "c";
isPercent = フォーマット === "p";
if (isCurrency || isPercent) {
//形式が通貨またはパーセントの場合、特定の数値形式情報を取得します
数値形式 = 通貨 ? numberFormat.currency :numberFormat.percent;
groupSize =numberFormat.groupSize[0];
groupSeparator =numberFormat[COMMA];
10 進数 = 数値形式[ポイント];
精度 = numberFormat.decmals;
シンボル =numberFormat.symbol;
pattern =numberFormat.pattern[負の? 0:1];
}
カスタム精度 = formatAndPrecision[2];
if (customPrecision) {
精度 = カスタム精度;
}
//指数形式で数値を返します
if (フォーマット === "e") {
カスタム精度を返しますか?数値.toExponential(精度) : 数値.toExponential(); // toExponential() と toExponential(unknown) は FF #653438.
で異なります。
}
// 形式がパーセントの場合は乗算します
if (isPercent) {
数値 *= 100;
}
数値 = ラウンド(数値, 精度);
負 = 数値
数値 = 数値.split(POINT);
整数 = 数値[0];
分数 = 数値[1];
//数値が負の場合は「-」を除外します。
if (負) {
整数 = integer.substring(1);
}
値 = 整数;
integerLength = integer.length;
//長さが十分な場合は、グループ区切り文字を数値に追加します
if (integerLength >= groupSize) {
値 = 空;
for (idx = 0; idx
if (idx > 0 && (integerLength - idx) % groupSize === 0) {
値 = groupSeparator;
}
値 = integer.charAt(idx);
}
}
if (分数) {
値 = 小数;
}
if (format === "n" && !negative) {
戻り値;
}
数値 = 空;
for (idx = 0, length = pattern.length; idx
ch = pattern.charAt(idx);
if (ch === "n") {
数値 = 値;
} else if (ch === "$" || ch === "%") {
数値 = 記号;
} else {
番号 = ch;
}
}
番号を返します;
}
//カスタム書式設定
//
//フォーマットをセクションごとに区切ります。
//数値を正の数にします
if (負) {
数値 = -数値;
}
if (format.indexOf("'") > -1 || format.indexOf(""") > -1 || format.indexOf("\") > -1) {
format = format.replace(literalRegExp, function (match) {
var quoteChar = match.charAt(0).replace("\", ""),
リテラル = match.slice(1).replace(quoteChar, "");
リテラル.push(リテラル);
return PLACEHOLDER;
});
}
format = format.split(";");
if (negative && format[1]) {
//ネガティブフォーマットを取得
フォーマット = フォーマット[1];
hasNegativeFormat = true;
} else if (数値 === 0) {
//ゼロのフォーマット
フォーマット = フォーマット[2] ||フォーマット[0];
if (format.indexOf(SHARP) == -1 && format.indexOf(ZERO) == -1) {
//文字列定数の場合は形式を返します。
戻り値の形式;
}
} else {
フォーマット = フォーマット[0];
}
パーセントインデックス = format.indexOf("%");
通貨インデックス = format.indexOf("$");
isPercent = パーセントインデックス != -1;
isCurrency = 通貨インデックス != -1;
//形式にパーセントがある場合は数値を乗算します
if (isPercent) {
数値 *= 100;
}
if (isCurrency && format[currencyIndex - 1] === "\") {
format = format.split("
\").join("");
isCurrency = false;
}
if (isCurrency || isPercent) {
//形式が通貨またはパーセントの場合、特定の数値形式情報を取得します
数値形式 = 通貨 ? numberFormat.currency :numberFormat.percent;
groupSize =numberFormat.groupSize[0];
groupSeparator =numberFormat[COMMA];
10 進数 = 数値形式[ポイント];
精度 = numberFormat.decmals;
シンボル =numberFormat.symbol;
}
hasGroup = format.indexOf(COMMA) > -1;
if (hasGroup) {
format = format.replace(commaRegExp, EMPTY);
}
DecimalIndex = format.indexOf(POINT);
長さ = format.length;
if (10 進数インデックス != -1) {
分数 = number.toString().split("e");
if (分数[1]) {
分数 =round(number, Math.abs(fraction[1]));
} else {
分数 = 分数[0];
}
分数 = 分数.split(POINT)[1] ||空;
zeroIndex = format.lastIndexOf(ZERO) - 10進数のインデックス;
SharpIndex = format.lastIndexOf(SHARP) - 10進数のインデックス;
hasZero = zeroIndex > -1;
hasSharp = SharpIndex > -1;
idx = 分数.長さ;
if (!hasZero && !hasSharp) {
フォーマット = フォーマット.substring(0, 10 進数インデックス) フォーマット.サブストリング(10 進数インデックス 1);
長さ = format.length;
10 進数インデックス = -1;
idx = 0;
} if (hasZero && zeroIndex > SharpIndex) {
idx = zeroIndex;
} else if (sharpIndex > zeroIndex) {
if (hasSharp && idx > SharpIndex) {
idx = SharpIndex;
} else if (hasZero && idx < zeroIndex) {
idx = zeroIndex;
}
}
if (idx > -1) {
数値 = ラウンド(数値, idx);
}
} else {
数値 = ラウンド(数値);
}
SharpIndex = format.indexOf(SHARP);
startZeroIndex = zeroIndex = format.indexOf(ZERO);
//最初の桁のプレースホルダーのインデックスを定義します
if (sharpIndex == -1 && zeroIndex != -1) {
start = zeroIndex;
else if (sharpIndex != -1 && zeroIndex == -1) {
start = SharpIndex;
} else {
開始 = シャープインデックス >ゼロインデックス ? zeroIndex : SharpIndex;
}
SharpIndex = format.lastIndexOf(SHARP);
zeroIndex = format.lastIndexOf(ZERO);
//最後の桁のプレースホルダーのインデックスを定義します
if (sharpIndex == -1 && zeroIndex != -1) {
end = zeroIndex;
else if (sharpIndex != -1 && zeroIndex == -1) {
end = SharpIndex;
} else {
終了 = シャープインデックス >ゼロインデックス ? SharpIndex : zeroIndex;
}
if (開始 == 長さ) {
終了 = 開始;
}
if (開始 != -1) {
値 = number.toString().split(POINT);
整数 = 値[0];
分数 = 値[1] ||空;
integerLength = integer.length;
分数の長さ = 分数.長さ;
if (負の && (数値 * -1) >= 0) {
負 = false;
}
//長さが十分な場合は、グループ区切り文字を数値に追加します
if (hasGroup) {
if (integerLength === groupSize && integerLength
整数 = groupSeparator 整数;
} else if (integerLength > groupSize) {
値 = 空;
for (idx = 0; idx
if (idx > 0 && (integerLength - idx) % groupSize === 0) {
値 = groupSeparator;
}
値 = integer.charAt(idx);
}
整数 = 値;
}
}
数値 = format.substring(0, start);
if (negative && !hasNegativeFormat) {
数値 = "-";
}
for (idx = 開始; idx
ch = format.charAt(idx);
if (10 進数インデックス == -1) {
if (end - idx
数値 = 整数;
休憩;
}
} else {
if (zeroIndex != -1 && zeroIndex < idx) {
置換 = 空;
}
if ((10 進数インデックス - idx) -1) {
数値 = 整数;
idx = 10 進数インデックス;
}
if (10 進数インデックス === idx) {
数値 = (分数 ? 小数 : 空) 分数;
idx = 終了 - 10 進数インデックス 1;
続行;
}
}
if (ch === ZERO) {
番号 = ch;
置換 = ch;
} else if (ch === SHARP) {
番号 = 置換;
}
}
if (終了 >= 開始) {
数値 = format.substring(end 1);
}