Skip to content

Commit 9526f7c

Browse files
committed
Support negative dateinterval
1 parent caf7967 commit 9526f7c

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

src/Jms/Handler/XmlSchemaDateHandler.php

+13-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
<?php
2+
23
namespace GoetasWebservices\Xsd\XsdToPhpRuntime\Jms\Handler;
34

45
use JMS\Serializer\Context;
@@ -67,12 +68,21 @@ public function __construct($defaultTimezone = 'UTC')
6768

6869
}
6970

70-
public function deserializeDateIntervalXml(XmlDeserializationVisitor $visitor, $data, array $type){
71+
public function deserializeDateIntervalXml(XmlDeserializationVisitor $visitor, $data, array $type)
72+
{
7173
$attributes = $data->attributes('xsi', true);
72-
if (isset($attributes['nil'][0]) && (string) $attributes['nil'][0] === 'true') {
74+
if (isset($attributes['nil'][0]) && (string)$attributes['nil'][0] === 'true') {
7375
return null;
7476
}
75-
return new \DateInterval((string)$data);
77+
78+
//Accept negative intervals like -PT1M23S. Safe to assume that "-" doesn't exist elsewhere in a valid interval spec.
79+
$interval = str_replace('-', '', (string)$data, $count);
80+
$dateInterval = new \DateInterval($interval);
81+
82+
//Invert if a negative sign was found
83+
$dateInterval->invert = !!$count;
84+
85+
return $dateInterval;
7686
}
7787

7888
public function serializeDate(XmlSerializationVisitor $visitor, \DateTime $date, array $type, Context $context)

0 commit comments

Comments
 (0)