Skip to content

Commit 903796b

Browse files
committed
Merge pull request mde#117 from beeftornado/fixWidth-perf
Improve speed of _fixWidth
2 parents 9f3f88c + fd45732 commit 903796b

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

spec/date.spec.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@ var TestUtils = require('./test-utils')
22
, timezoneJS = TestUtils.getTimezoneJS();
33

44
describe('timezoneJS.Date', function () {
5+
it('should correctly trim dates when date exceeds format length', function () {
6+
var date = new timezoneJS.Date(2011, 10, 22);
7+
expect(date.toString('yy-MM-dd')).toEqual('11-11-22')
8+
});
9+
10+
it('should correctly pad dates when date is shorter than the format length', function () {
11+
var date = new timezoneJS.Date(2011, 3, 2);
12+
expect(date.toString('yyyy-MM-dd')).toEqual('2011-04-02')
13+
});
14+
515
it('should have correct format when initialized', function () {
616
var date = new timezoneJS.Date();
717
expect(date.toString()).toMatch(/[\d]{4}(-[\d]{2}){2} ([\d]{2}:){2}[\d]{2}/);

src/date.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -114,19 +114,25 @@
114114
//
115115
// `_fixWidth(2, 2) = '02'`
116116
//
117-
// `_fixWidth(1998, 2) = '98'`
117+
// `_fixWidth(1998, 2) = '98'` // year, shorten it to the 2 digit representation
118+
//
119+
// `_fixWidth(23, 1) = '23'` // hour, even with 1 digit specified, do not trim
118120
//
119121
// This is used to pad numbers in converting date to string in ISO standard.
120122
var _fixWidth = function (number, digits) {
121123
if (typeof number !== "number") { throw "not a number: " + number; }
124+
var trim = (number > 1000); // only trim 'year', as the others don't make sense why anyone would want that
122125
var s = number.toString();
123-
if (number.length > digits) {
124-
return number.substr(number.length - digits, number.length);
126+
var s_len = s.length;
127+
if (trim && s_len > digits) {
128+
return s.substr(s_len - digits, s_len);
125129
}
126-
while (s.length < digits) {
127-
s = '0' + s;
130+
s = [s];
131+
while (s_len < digits) {
132+
s.unshift('0');
133+
s_len++;
128134
}
129-
return s;
135+
return s.join('');
130136
};
131137

132138
// Abstraction layer for different transport layers, including fleegix/jQuery/Zepto

0 commit comments

Comments
 (0)