# 4d47's solution

## to Gigasecond in the PHP Track

Published at Jul 13 2018 · 0 comments
Instructions
Test suite
Solution

Calculate the moment when someone has lived for 10^9 seconds.

A gigasecond is 10^9 (1,000,000,000) seconds.

## Running the tests

1. Go to the root of your PHP exercise directory, which is `<EXERCISM_WORKSPACE>/php`. To find the Exercism workspace run

`````` % exercism debug | grep Workspace
``````
2. Get PHPUnit if you don't have it already.

`````` % wget --no-check-certificate https://phar.phpunit.de/phpunit.phar
% chmod +x phpunit.phar
``````
3. Execute the tests:

`````` % ./phpunit.phar gigasecond/gigasecond_test.php
``````

## Source

Chapter 9 in Chris Pine's online Learn to Program tutorial. http://pine.fm/LearnToProgram/?Chapter=09

## Submitting Incomplete Solutions

It's possible to submit an incomplete solution so you can see how others have completed the exercise.

### gigasecond_test.php

``````<?php

require "gigasecond.php";

class GigasecondTest extends PHPUnit\Framework\TestCase
{

public function dateSetup(\$date)
{
\$UTC = new DateTimeZone("UTC");
\$date = new DateTime(\$date, \$UTC);
return \$date;
}

public function testDate1()
{
\$date = GigasecondTest::dateSetup("2011-04-25");
\$gs = from(\$date);

\$this->assertSame("2043-01-01 01:46:40", \$gs->format("Y-m-d H:i:s"));
}

public function testDate2()
{
\$date = GigasecondTest::dateSetup("1977-06-13");
\$gs = from(\$date);

\$this->assertSame("2009-02-19 01:46:40", \$gs->format("Y-m-d H:i:s"));
}

public function testPreUnixEpoch()
{
\$date = GigasecondTest::dateSetup("1959-7-19");
\$gs = from(\$date);

\$this->assertSame("1991-03-27 01:46:40", \$gs->format("Y-m-d H:i:s"));
}

public function testDateWithTime1()
{
\$date = GigasecondTest::dateSetup("2015-01-24 22:00:00");
\$gs = from(\$date);

\$this->assertSame("2046-10-02 23:46:40", \$gs->format("Y-m-d H:i:s"));
}

public function testDateWithTime2()
{
\$date = GigasecondTest::dateSetup("2015-01-24 23:59:59");
\$gs = from(\$date);

\$this->assertSame("2046-10-03 01:46:39", \$gs->format("Y-m-d H:i:s"));
}

public function testNoMutation()
{
\$date = GigasecondTest::dateSetup("2015-01-24");
\$gs = from(\$date);

\$this->assertNotEquals(\$date, \$gs);
}

public function testYourself()
{
// Replace the string "your_birthday" with your birthday's datestring

\$this->markTestSkipped("Skip");
\$your_birthday = GigasecondTest::dateSetup("your_birthday");
\$gs = from(\$your_birthday);

\$this->assertSame("2046-10-03 01:46:39", \$gs->format("Y-m-d H:i:s"));
}
}``````
``````<?php

function from(DateTime \$date)
{
static \$gigaseconds = 'PT' . (10 ** 9) . 'S';
return DateTimeImmutable::createFromMutable(\$date)
}``````