mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
Note that we upgrade to the 2.x branch of the dependency, as the 3.x branch requires PHP version 8.2 or later. There's no reason for us to move our minimum supported version of PHP just yet.
40 lines
1.0 KiB
PHP
40 lines
1.0 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace ZipStream;
|
|
|
|
use DateInterval;
|
|
use DateTimeImmutable;
|
|
use DateTimeInterface;
|
|
use ZipStream\Exception\DosTimeOverflowException;
|
|
|
|
/**
|
|
* @internal
|
|
*/
|
|
abstract class Time
|
|
{
|
|
private const DOS_MINIMUM_DATE = '1980-01-01 00:00:00Z';
|
|
|
|
public static function dateTimeToDosTime(DateTimeInterface $dateTime): int
|
|
{
|
|
$dosMinimumDate = new DateTimeImmutable(self::DOS_MINIMUM_DATE);
|
|
|
|
if ($dateTime->getTimestamp() < $dosMinimumDate->getTimestamp()) {
|
|
throw new DosTimeOverflowException(dateTime: $dateTime);
|
|
}
|
|
|
|
$dateTime = DateTimeImmutable::createFromInterface($dateTime)->sub(new DateInterval('P1980Y'));
|
|
|
|
[$year, $month, $day, $hour, $minute, $second] = explode(' ', $dateTime->format('Y n j G i s'));
|
|
|
|
return
|
|
((int) $year << 25) |
|
|
((int) $month << 21) |
|
|
((int) $day << 16) |
|
|
((int) $hour << 11) |
|
|
((int) $minute << 5) |
|
|
((int) $second >> 1);
|
|
}
|
|
}
|