Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- namespace BookingNamespace;
- /**
- * extend DateTime functionalities so that we are able to define what should be considered to be "now"
- * - set_now allows to define "now"
- * - modify_now applies the modify function on what is defined as "now"
- * - reset is for going back to original DateTime behaviour
- *
- * @author mika
- */
- class DateTime extends \DateTime
- {
- private static $fake_time=null;
- // public static method that extend DateTime functionalities
- public static function reset(){ self::$fake_time = null; }
- public static function set_now($time = "now", DateTimeZone $timezone = null)
- {
- self::$fake_time = new \DateTime($time, $timezone);
- }
- public static function modify_now($modify){ if( ! is_null(self::$fake_time)) self::$fake_time->modify($modify); }
- // private methods for the constructor
- private function is_virtual(){ return ! is_null(self::$fake_time); }
- private function is_relative_date($val){ return strtotime($val) != strtotime($val, 0); }
- /**
- * constructor:
- * - if we work with virtual now, relative times are calculated based on $fake_time
- * - DateTimeZone is ignored in virtual context (and relative time).
- * - if we do not work with virtual now, parent constructor is called.
- */
- public function __construct($time = "now", DateTimeZone $timezone = null)
- {
- if($this->is_virtual()&&$this->is_relative_date($time))
- {
- parent::__construct(self::$fake_time->format(DateTime::ISO8601));
- parent::modify($time);
- }
- else
- parent::__construct($time, $timezone);
- }
- }
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement