diff --git a/src/sammo/TimeUtil.php b/src/sammo/TimeUtil.php index 84572bcb..addaf22b 100644 --- a/src/sammo/TimeUtil.php +++ b/src/sammo/TimeUtil.php @@ -5,62 +5,111 @@ class TimeUtil { public static function DateToday() { - return date('Y-m-d'); + $obj = new \DateTime(); + return $obj->format('Y-m-d'); } - public static function DatetimeNow() + public static function DatetimeNow(bool $withFraction=false) { - return date('Y-m-d H:i:s'); + $obj = new \DateTime(); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromNowDay($day) + public static function DatetimeFromNowDay($day, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime("{$day} days")); + $obj = new \DateTime(); + $obj->modify("{$day} days"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromNowHour($hour) + public static function DatetimeFromNowHour($hour, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime("{$hour} hours")); + $obj = new \DateTime(); + $obj->modify("{$hour} hours"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromNowMinute($minute) + public static function DatetimeFromNowMinute($minute, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime("{$minute} minutes")); + $obj = new \DateTime(); + $obj->modify("{$minute} minutes"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromNowSecond($second) + public static function DatetimeFromNowSecond($second, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime("{$second} seconds")); + $obj = new \DateTime(); + $obj->modify("{$second} seconds"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromMinute($date, $minute) + public static function DatetimeFromMinute($date, $minute, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime($date) + $minute*60); + $obj = new \DateTime($date); + $obj->modify("{$minute} minutes"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function DatetimeFromSecond($date, $second) + public static function DatetimeFromSecond($date, $second, bool $withFraction=false) { - return date('Y-m-d H:i:s', strtotime($date) + $second); + $obj = new \DateTime($date); + $obj->modify("{$second} seconds"); + if(!$withFraction){ + return $obj->format('Y-m-d H:i:s'); + } + return $obj->format('Y-m-d H:i:s.u'); } - public static function CutSecond($date) - { - $date[17] = '0'; - $date[18] = '0'; - return $date; + public static function SecondsToDateInterval(float $fullSeconds): \DateInterval{ + $seconds = floor($fullSeconds); + $fraction = $fullSeconds - $seconds; + + $interval = new \DateInterval("PT0S"); + $interval->s = $seconds; + $interval->f = $fraction; + + $d0 = new \DateTimeImmutable("@0"); + $d1 = $d0->add($interval); + + return $d1->diff($d0); } - public static function CutMinute($date) - { - $date[14] = '0'; - $date[15] = '0'; - $date[17] = '0'; - $date[18] = '0'; - return $date; - } - - public static function HourMinuteSecond($second) - { - return date('H:i:s', strtotime('00:00:00') + $second); + public static function DateIntervalToSeconds(\DateInterval $interval): float{ + if($interval->days !== FALSE){ + $days = $interval->days; + } + else{ + if($interval->y != 0){ + throw new \InvalidArgumentException('Year argument conversion is not supported'); + } + if($interval->m != 0){ + throw new \InvalidArgumentException('Month argument conversion is not supported'); + } + $days = $interval->d; + } + + $hours = $days * 24 + $interval->h; + $minutes = $hours * 60 + $interval->i; + $seconds = $minutes * 60 + $interval->s + $interval->f; + + return $seconds; } }