Sha256: b9b31e1553102c807ead53dd87a7256e2f508ee664ce6b76f3b934c78ed25bae

Contents?: true

Size: 1.71 KB

Versions: 396

Compression:

Stored size: 1.71 KB

Contents

<?php

class Clock
{
    /**
     * @var int
     */
    private $minutes;

    /**
     * @param int $hour
     * @param int $minutes
     */
    public function __construct($hour, $minutes = 0)
    {
        $totalMinutes = $this->calculateTotalMinutes($hour, $minutes);

        $minutesWithoutFullDays = $this->ignoreWholeDays($totalMinutes);

        $positiveTimeInMinutes = $this->ensurePositiveMinutes($minutesWithoutFullDays);

        $this->minutes = $positiveTimeInMinutes;
    }

    /**
     * Returns a new Clock incremented by $minutes
     *
     * @param int $minutes
     *
     * @return Clock
     */
    public function add($minutes)
    {
        return new Clock(0, $this->minutes + $minutes);
    }

    /**
     * Returns a new Clock decremented by $minutes
     *
     * @param int $minutes
     *
     * @return Clock
     */
    public function sub($minutes)
    {
        return $this->add(-$minutes);
    }

    /**
     * Returns the string representation of the clock in 24hr format
     *
     * @return string
     */
    public function __toString()
    {
        return sprintf('%02d:%02d', $this->minutes / 60, $this->minutes % 60);
    }

    /**
     * @param int $hour
     * @param int $minutes
     *
     * @return int
     */
    private function calculateTotalMinutes($hour, $minutes)
    {
        return ($hour * 60) + $minutes;
    }

    /**
     * @param int $minutes
     *
     * @return int
     */
    private function ignoreWholeDays($minutes)
    {
        return $minutes % (24 * 60);
    }

    /**
     * @param int $minutes
     *
     * @return int
     */
    private function ensurePositiveMinutes($minutes)
    {
        return ($minutes < 0) ? $minutes + 1440 : $minutes;
    }
}

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/php/exercises/clock/example.php
trackler-2.2.1.179 tracks/php/exercises/clock/example.php
trackler-2.2.1.178 tracks/php/exercises/clock/example.php
trackler-2.2.1.177 tracks/php/exercises/clock/example.php
trackler-2.2.1.176 tracks/php/exercises/clock/example.php
trackler-2.2.1.175 tracks/php/exercises/clock/example.php
trackler-2.2.1.174 tracks/php/exercises/clock/example.php
trackler-2.2.1.173 tracks/php/exercises/clock/example.php
trackler-2.2.1.172 tracks/php/exercises/clock/example.php
trackler-2.2.1.171 tracks/php/exercises/clock/example.php
trackler-2.2.1.170 tracks/php/exercises/clock/example.php
trackler-2.2.1.169 tracks/php/exercises/clock/example.php
trackler-2.2.1.167 tracks/php/exercises/clock/example.php
trackler-2.2.1.166 tracks/php/exercises/clock/example.php
trackler-2.2.1.165 tracks/php/exercises/clock/example.php
trackler-2.2.1.164 tracks/php/exercises/clock/example.php
trackler-2.2.1.163 tracks/php/exercises/clock/example.php
trackler-2.2.1.162 tracks/php/exercises/clock/example.php
trackler-2.2.1.161 tracks/php/exercises/clock/example.php
trackler-2.2.1.160 tracks/php/exercises/clock/example.php