Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/php.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
php-versions: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2']
php-versions: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0', '8.1', '8.2', '8.3']
steps:
- name: Checkout
uses: actions/checkout@v2
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
.*
composer.lock
phpcs.xml
phpunit.xml
Expand Down
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
"mongodb/mongodb": "^1.0"
},
"require-dev": {
"phpunit/phpunit": ">=6.5",
"phpunit/phpunit": "^6.5||^9.6",
"squizlabs/php_codesniffer": "^3.7"
},
"config": {
Expand Down
21 changes: 21 additions & 0 deletions src/Utilities/UTCDateTimeUtil.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace SubjectivePHP\MongoDB\Utilities;

use DateTimeInterface;
use MongoDB\BSON\UTCDateTime;

abstract class UTCDateTimeUtil
Expand All @@ -25,4 +26,24 @@ final public static function fromSeconds(int $seconds) : UTCDateTime
$microSeconds = $seconds * 1000;
return new UTCDateTime($microSeconds);
}

/**
* @param DateTimeInterface $dateTime The DateTime object from which a UTCDateTime object will be constructed.
*
* @return UTCDateTime
*/
final public static function fromDateTime(DateTimeInterface $dateTime): UTCDateTime
{
return self::fromSeconds($dateTime->getTimestamp());
}

/**
* @param string $dateTime A date/time string.
*
* @return UTCDateTime
*/
final public static function fromDateTimeString(string $dateTime): UTCDateTime
{
return self::fromSeconds(strtotime($dateTime));
}
}
25 changes: 24 additions & 1 deletion tests/Utilities/UTCDateTimeUtilTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace SubjectivePHPTest\MongoDB\Utilities;

use DateTime;
use PHPUnit\Framework\TestCase;
use SubjectivePHP\MongoDB\Utilities\UTCDateTimeUtil;

Expand All @@ -25,10 +26,32 @@ public function nowReturnsCurrentDateTime()
* @test
* @covers ::fromSeconds
*/
public function fromSecondsReturnsExcpectedDateTime()
public function fromSecondsReturnsExpectedDateTime()
{
$expectedTimestamp = time();
$actual = UTCDateTimeUtil::fromSeconds($expectedTimestamp)->toDateTime()->getTimestamp();
$this->assertLessThanOrEqual($expectedTimestamp, $actual);
}

/**
* @test
* @covers ::fromDateTime
*/
public function fromDateTimeReturnsExpectedDateTime()
{
$dateTime = new DateTime();
$actual = UTCDateTimeUtil::fromDateTime($dateTime)->toDateTime()->getTimestamp();
$this->assertSame($dateTime->getTimestamp(), $actual);
}

/**
* @test
* @covers ::fromDateTimeString
*/
public function fromDateTimeStringReturnsExpectedDateTime()
{
$dateTimeString = '2025-04-11 12:00:00';
$actual = UTCDateTimeUtil::fromDateTimeString($dateTimeString)->toDateTime()->getTimestamp();
$this->assertSame(strtotime($dateTimeString), $actual);
}
}
Loading