/** * Create DateTime object defaults to something that will accept * the default MySQL datetime format of "Y-m-d H:i:s". * * @param string $formatOrTime * @param string $time -OPTIONAL * @param DateTimeZone $timezone -OPTIONAL * @return DateTime */ public static function createFromFormat($formatOrTime, $time = '', $timezone = null) { if ($time === '') { $parsed = date_parse($formatOrTime); } else { $parsed = date_parse_from_format($formatOrTime, $time); } $d = new self(); if ($timezone !== null) { $d->setTimezone($timezone); } $d->setDate($parsed); $d->setTime($parsed); return $d; }
/** * Internal _createFromFormat implementation for 5.2 * @internal * @param string $format Format like in date() * @param string $time Time string to parse * @param DateTimeZone $timezone TZ * @return SugarDateTime * @see DateTime::createFromFormat */ protected static function _createFromFormat($format, $time, DateTimeZone $timezone = null) { $res = new self(); if (!empty($timezone)) { $res->setTimezone($timezone); } if (self::$use_strptime && function_exists("strptime")) { $str_format = str_replace(array_keys(TimeDate::$format_to_str), array_values(TimeDate::$format_to_str), $format); // for a reason unknown to modern science, %P doesn't work in strptime $str_format = str_replace("%P", "%p", $str_format); // strip spaces before am/pm as our formats don't have them $time = preg_replace('/\\s+(AM|PM)/i', '\\1', $time); // TODO: better way to not risk locale stuff problems? $data = strptime($time, $str_format); if (empty($data)) { $GLOBALS['log']->error("Cannot parse {$time} for format {$format}"); return null; } if ($data["tm_year"] == 0) { unset($data["tm_year"]); } if ($data["tm_mday"] == 0) { unset($data["tm_mday"]); } if (isset($data["tm_year"])) { $data["tm_year"] += 1900; } if (isset($data["tm_mon"])) { $data["tm_mon"]++; } $data += self::$data_init; // fill in missing parts } else { // Windows, etc. might not have strptime - we'd have to work harder here $data = $res->_strptime($time, $format); } if (empty($data)) { $GLOBALS['log']->error("Cannot parse {$time} for format {$format}"); return null; } if (isset($data["tm_year"])) { $res->setDate($data["tm_year"], $data["tm_mon"], $data["tm_mday"]); } $res->setTime($data["tm_hour"], $data["tm_min"], $data["tm_sec"]); return $res; }
/** * Generates a Date object with a timestamp and a timezone. * @param long $timestamp */ public static function fromTime($timestamp, TimeZone $timeZone = null) { $d = new self(); $d->setTimeZone($timeZone); $d->setTime(\blaze\lang\Long::asNative($timestamp)); return $d; }