Completed
Push — master ( dc6729...95fbe4 )
by Christian
04:22
created

DateTime::difference()   D

Complexity

Conditions 10
Paths 4

Size

Total Lines 30
Code Lines 21

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 10
eloc 21
nc 4
nop 2
dl 0
loc 30
rs 4.8196
c 1
b 0
f 0

How to fix   Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
namespace N98\Util;
4
5
use DateTime as PhpDateTime;
6
7
class DateTime
8
{
9
    /**
10
     * Human-readable string with time difference
11
     *
12
     * @param PhpDateTime $time1
13
     * @param PhpDateTime $time2
14
     *
15
     * @return string
16
     */
17
    public static function difference(PhpDateTime $time1, PhpDateTime $time2)
18
    {
19
        if ($time1 == $time2) {
20
            return '0';
21
        }
22
23
        $interval = $time1->diff($time2);
24
        $years = $interval->format('%y');
25
        $months = $interval->format('%m');
26
        $days = $interval->format('%d');
27
        $hours = $interval->format('%h');
28
        $minutes = $interval->format('%i');
29
        $seconds = $interval->format('%s');
30
31
        $differenceString = trim(
32
            ($years ? $years . 'Y ' : '')
33
            . ($months ? $months . 'M ' : '')
34
            . ($days ? $days . 'd ' : '')
35
            . ($hours ? $hours . 'h ' : '')
36
            . ($minutes ? $minutes . 'm ' : '')
37
            . ($seconds ? $seconds . 's ' : '')
38
        );
39
40
        if (!strlen($differenceString)) {
41
            $milliseconds = max(0, $time2->format("u") / 1000 - $time1->format("u") / 1000);
42
            $differenceString = $milliseconds ? sprintf('%0.2fms', $milliseconds) : '';
43
        }
44
45
        return $differenceString;
46
    }
47
48
    /**
49
     * Returns a readable string with time difference
50
     *
51
     * @param PhpDateTime $time1
52
     * @param PhpDateTime $time2
53
     *
54
     * @return string
55
     */
56
    public function getDifferenceAsString(PhpDateTime $time1, PhpDateTime $time2)
57
    {
58
        return self::difference($time1, $time2);
59
    }
60
}
61