Skip to content

Commit 8f4d0ac

Browse files
committed
Fix d3#1483; time parsing with padding modifier.
1 parent f59fc64 commit 8f4d0ac

4 files changed

Lines changed: 12 additions & 5 deletions

File tree

d3.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8531,12 +8531,13 @@ d3 = function() {
85318531
return format;
85328532
}
85338533
function d3_time_parse(date, template, string, j) {
8534-
var c, p, i = 0, n = template.length, m = string.length;
8534+
var c, p, t, i = 0, n = template.length, m = string.length;
85358535
while (i < n) {
85368536
if (j >= m) return -1;
85378537
c = template.charCodeAt(i++);
85388538
if (c === 37) {
8539-
p = d3_time_parsers[template.charAt(i++)];
8539+
t = template.charAt(i++);
8540+
p = d3_time_parsers[t === "0" || t === "_" || t === "-" ? template.charAt(i++) : t];
85408541
if (!p || (j = p(date, string, j)) < 0) return -1;
85418542
} else if (c != string.charCodeAt(j++)) {
85428543
return -1;

d3.min.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/time/format.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,16 @@ function d3_time_format(template) {
6060
function d3_time_parse(date, template, string, j) {
6161
var c,
6262
p,
63+
t,
6364
i = 0,
6465
n = template.length,
6566
m = string.length;
6667
while (i < n) {
6768
if (j >= m) return -1;
6869
c = template.charCodeAt(i++);
6970
if (c === 37) {
70-
p = d3_time_parsers[template.charAt(i++)];
71+
t = template.charAt(i++);
72+
p = d3_time_parsers[t === "0" || t === "_" || t === "-" ? template.charAt(i++) : t];
7173
if (!p || ((j = p(date, string, j)) < 0)) return -1;
7274
} else if (c != string.charCodeAt(j++)) {
7375
return -1;

test/time/format-test.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,10 @@ suite.addBatch({
284284
assert.deepEqual(p("% 02/03/1991"), local(1991, 1, 3));
285285
assert.isNull(p("%% 03/10/2010"));
286286
},
287+
"parses padding modifier": function(format) {
288+
var p = format("%-m/%0d/%_Y").parse;
289+
assert.deepEqual(p("01/ 1/1990"), local(1990, 0, 1));
290+
},
287291
"doesn't crash when given weird strings": function(format) {
288292
try {
289293
Object.prototype.foo = 10;

0 commit comments

Comments
 (0)