1616 */
1717class Date extends \DateTime {
1818
19+ /**
20+ * Support for Null values
21+ * @var bool
22+ */
23+ public bool $ isNull = false ;
24+
1925 /**
2026 * AbraFlexi date to PHP DateTime conversion
2127 *
22- * @param string $flexidate 2017-05-26 or 2017-05-26Z or 2017-05-26+02:00
28+ * @param string $flexidate 2017-05-26 or 2017-05-26Z or 2017-05-26+02:00 or "NOW"
2329 *
2430 * @return \DateTime | false
2531 */
26- public function __construct (string $ flexidate ) {
32+ public function __construct (string $ flexidate = 'NOW ' ) {
33+ $ this ->isNull = empty ($ flexidate );
34+ $ format = '' ;
2735 if (strstr ($ flexidate , '+ ' )) {
2836 $ format = RO ::$ DateFormat . 'O ' ;
2937 } elseif (strstr ($ flexidate , 'Z ' )) {
3038 $ format = RO ::$ DateFormat . 'Z ' ;
31- } else {
39+ } elseif ( ! empty ( $ flexidate ) && ( $ flexidate != ' NOW ' )) {
3240 $ format = RO ::$ DateFormat ;
3341 }
34- parent ::__construct (\DateTime::createFromFormat ($ format , $ flexidate )->setTime (0 , 0 )->format (\DateTimeInterface::ATOM ));
42+ if (strstr ($ flexidate , ': ' )){ // ?!?!?
43+ $ flexidate = substr ($ flexidate ,0 , -6 );
44+ }
45+ parent ::__construct (empty ($ format ) ? null : \DateTime::createFromFormat ($ format , $ flexidate )->setTime (0 , 0 )->format (\DateTimeInterface::ATOM ));
3546 }
3647
3748 /**
@@ -40,7 +51,7 @@ public function __construct(string $flexidate) {
4051 * @return string
4152 */
4253 public function __toString () {
43- return $ this ->format (RO ::$ DateFormat );
54+ return $ this ->isNull ? null : $ this -> format (RO ::$ DateFormat );
4455 }
4556
4657}
0 commit comments