Skip to content

Commit 4b00342

Browse files
committed
Decoder: fixed datetime regexp [Closes #29]
1 parent 209868a commit 4b00342

File tree

4 files changed

+24
-2
lines changed

4 files changed

+24
-2
lines changed

src/Neon/Decoder.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Decoder
3636
'?:[\t\ ]+', // whitespace
3737
);
3838

39-
const PATTERN_DATETIME = '#\d\d\d\d-\d\d?-\d\d?(?:(?:[Tt]| +)\d\d?:\d\d:\d\d(?:\.\d*)? *(?:Z|[-+]\d\d?(?::\d\d)?)?)?\z#A';
39+
const PATTERN_DATETIME = '#\d\d\d\d-\d\d?-\d\d?(?:(?:[Tt]| +)\d\d?:\d\d:\d\d(?:\.\d*)? *(?:Z|[-+]\d\d?(?::?\d\d)?)?)?\z#A';
4040

4141
const PATTERN_HEX = '#0x[0-9a-fA-F]+\z#A';
4242

src/Neon/Encoder.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class Encoder
2424
*/
2525
public function encode($var, $options = NULL)
2626
{
27-
if ($var instanceof \DateTime) {
27+
if ($var instanceof \DateTime || $var instanceof \DateTimeImmutable) {
2828
return $var->format('Y-m-d H:i:s O');
2929

3030
} elseif ($var instanceof Entity) {

tests/Neon/Decoder.phpt

+10
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,13 @@ foreach (array_merge($dataSet['invalid syntax'], $dataSet['invalid encoding']) a
235235
Neon::decode($set[0]);
236236
}, 'Nette\Neon\Exception');
237237
}
238+
239+
// datetime
240+
Assert::equal(
241+
new DateTime('2016-06-03T19:00:00+02:00'),
242+
Neon::decode('2016-06-03 19:00:00 +0200')
243+
);
244+
Assert::equal(
245+
new DateTime('2016-06-03T19:00:00+02:00'),
246+
Neon::decode('2016-06-03 19:00:00 +02:00')
247+
);

tests/Neon/Encoder.phpt

+12
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,15 @@ Assert::same(
9191
'foo(1, 2)::bar(3)',
9292
Neon::encode(Neon::decode('foo(1,2)::bar(3)'))
9393
);
94+
95+
Assert::same(
96+
'2016-06-03 19:00:00 +0200',
97+
Neon::encode(new DateTime('2016-06-03T19:00:00+02:00'))
98+
);
99+
100+
if (PHP_VERSION_ID >= 50500) {
101+
Assert::same(
102+
'2016-06-03 19:00:00 +0200',
103+
Neon::encode(new DateTimeImmutable('2016-06-03T19:00:00+02:00'))
104+
);
105+
}

0 commit comments

Comments
 (0)