value; return $date == null ? null: $date->getTimestamp(); } public function fieldSettingsToHash($settingsValue, array $context = array()) { if (is_array($settingsValue) && isset($settingsValue['dateInterval']) && is_object($settingsValue['dateInterval'])) { $settingsValue['dateInterval'] = $this->format($settingsValue['dateInterval']); } return $settingsValue; } public function hashToFieldSettings($settingsHash, array $context = array()) { if (is_array($settingsHash) && isset($settingsHash['dateInterval']) && is_string($settingsHash['dateInterval'])) { // ISO-8601 format, loose matching because I am lazy if (preg_match('/^P[0-9YMDWTHS]+$/', $settingsHash['dateInterval'])) { $settingsHash['dateInterval'] = new \DateInterval($settingsHash['dateInterval']); } else { $settingsHash['dateInterval'] = \DateInterval::createFromDateString($settingsHash['dateInterval']); } } return $settingsHash; } /** * @param \DateInterval $dateInterval * @return string * @todo add support for DateInterval::$invert */ protected function format(\DateInterval $dateInterval) { $format = array(); if (0 != $dateInterval->y) { $format[] = $dateInterval->y.' years'; } if (0 != $dateInterval->m) { $format[] = $dateInterval->m.' months'; } if (0 != $dateInterval->d) { $format[] = $dateInterval->d.' days'; } //if (0 < $dateInterval->h || 0 < $dateInterval->i || 0 < $dateInterval->s) { // $format .= 'T'; //} if (0 != $dateInterval->h) { $format[] = $dateInterval->h.' hours'; } if (0 != $dateInterval->i) { $format[] = $dateInterval->i.' minutes'; } if (0 != $dateInterval->s) { $format[] = $dateInterval->s.' seconds'; } return implode( ', ', $format); } }