Skip to content

Commit

Permalink
Merge pull request #454 from cakephp/php-8.4
Browse files Browse the repository at this point in the history
Fix error on PHP 8.4
  • Loading branch information
markstory authored Jul 18, 2024
2 parents 96a3d2d + d5fef65 commit 786d69e
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 14 deletions.
52 changes: 50 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,56 @@ permissions:

jobs:
testsuite:
uses: cakephp/.github/.github/workflows/testsuite-without-db.yml@5.x
secrets: inherit
runs-on: ubuntu-22.04
continue-on-error: ${{ matrix.unstable }}
strategy:
fail-fast: false
matrix:
php-version: ['8.1']
dependencies: [highest]
unstable: [false]
include:
- php-version: '8.1'
dependencies: lowest
unstable: false
- php-version: '8.2'
dependencies: highest
unstable: false
- php-version: '8.3'
dependencies: highest
unstable: false
- php-version: '8.4'
dependencies: highest
unstable: true

steps:
- uses: actions/checkout@v4

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php-version }}
extensions: mbstring, intl
ini-values: zend.assertions=1
coverage: pcov

- name: Composer install
uses: ramsey/composer-install@v2
with:
dependency-versions: ${{ matrix.dependencies }}
composer-options: ${{ matrix.composer-options }}

- name: Run PHPUnit
run: |
if [[ ${{ matrix.php-version }} == '8.1' && ${{ matrix.dependencies }} == 'highest' ]]; then
export CODECOVERAGE=1 && vendor/bin/phpunit --display-deprecations --display-warnings --display-incomplete --display-skipped --coverage-clover=coverage.xml
else
vendor/bin/phpunit --display-deprecations --display-warnings
fi
- name: Code Coverage Report
if: success() && matrix.php-version == '8.1' && matrix.dependencies == 'highest'
uses: codecov/codecov-action@v3

cs-stan:
uses: cakephp/.github/.github/workflows/cs-stan.yml@5.x
Expand Down
4 changes: 4 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,7 @@ parameters:
- src/
ignoreErrors:
- identifier: missingType.iterableValue
-
message: "#^Call to an undefined static method DateTimeImmutable\\:\\:createFromTimestamp\\(\\)\\.$#"
count: 1
path: src/Chronos.php
8 changes: 5 additions & 3 deletions src/Chronos.php
Original file line number Diff line number Diff line change
Expand Up @@ -736,13 +736,15 @@ public static function createFromArray(array $values): static
/**
* Create an instance from a timestamp
*
* @param int $timestamp The timestamp to create an instance from.
* @param float|int $timestamp The timestamp to create an instance from.
* @param \DateTimeZone|string|null $timezone The DateTimeZone object or timezone name the new instance should use.
* @return static
*/
public static function createFromTimestamp(int $timestamp, DateTimeZone|string|null $timezone = null): static
public static function createFromTimestamp(float|int $timestamp, DateTimeZone|string|null $timezone = null): static
{
return static::now($timezone)->setTimestamp($timestamp);
$instance = PHP_VERSION_ID >= 80400 ? parent::createFromTimestamp($timestamp) : new static('@' . $timestamp);

return $timezone ? $instance->setTimezone($timezone) : $instance;
}

/**
Expand Down
20 changes: 11 additions & 9 deletions tests/TestCase/DateTime/CreateFromTimestampTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,16 +24,17 @@ class CreateFromTimestampTest extends TestCase
public function testCreateReturnsDatingInstance()
{
$d = Chronos::createFromTimestamp(Chronos::create(1975, 5, 21, 22, 32, 5)->timestamp);
$this->assertDateTime($d, 1975, 5, 21, 22, 32, 5);
$this->assertDateTime($d, 1975, 5, 22, 2, 32, 5);
$this->assertSame('+00:00', $d->tzName);
}

public function testCreateFromTimestampUsesDefaultTimezone()
public function testCreateFromTimestampUsesUTC()
{
$d = Chronos::createFromTimestamp(0);

// We know Toronto is -5 since no DST in Jan
$this->assertSame(1969, $d->year);
$this->assertSame(-5 * 3600, $d->offset);
$this->assertSame(1970, $d->year);
$this->assertSame(0, $d->offset);
$this->assertSame('+00:00', $d->tzName);
}

public function testCreateFromTimestampWithDateTimeZone()
Expand All @@ -45,9 +46,10 @@ public function testCreateFromTimestampWithDateTimeZone()

public function testCreateFromTimestampWithString()
{
$d = Chronos::createFromTimestamp(0, 'UTC');
$this->assertDateTime($d, 1970, 1, 1, 0, 0, 0);
$this->assertSame(0, $d->offset);
$this->assertSame('UTC', $d->tzName);
$d = Chronos::createFromTimestamp(0, 'America/Toronto');
// We know Toronto is -5 since no DST in Jan
$this->assertSame(1969, $d->year);
$this->assertSame(-5 * 3600, $d->offset);
$this->assertSame('America/Toronto', $d->tzName);
}
}

0 comments on commit 786d69e

Please sign in to comment.