summaryrefslogtreecommitdiffstats
path: root/SchedulerHelperDate.php
blob: c1d324471c01e08794c6952e7c71a77a2b5dd8e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php

namespace DHTMLX_Scheduler;
use DateTime;

class SchedulerHelperDate
{
    const SECONDS_IN_DAY = 86400;
    const DAYS_IN_WEEK = 7;
    const MONTHS_IN_YEAR = 12;

    const FORMAT_DEFAULT = "Y-m-d H:i:s";

    static $DATE_UNITS = array(
        "hour" => "H",
        "minute" => "i",
        "second" => "s",
        "month" => "m",
        "day" => "d",
        "year" => "Y"
    );

    static public function differenceBetweenDates($firstDateStamp, $secondDateStamp) {
        $firstDate = new DateTime(date(self::FORMAT_DEFAULT, $firstDateStamp));
        $secondDate = new DateTime(date(self::FORMAT_DEFAULT, $secondDateStamp));
        $dateUnits = self::$DATE_UNITS;
        $differenceArray = array();

        foreach($dateUnits as $dateUnit)
            $differenceArray[$dateUnit] = $firstDate->diff($secondDate, true)->format("%".$dateUnit);

        return $differenceArray;
    }

    static public function getDateTimestamp($date, $serverDate)
    {
        $parsedDate = date_parse($date);
        if ($serverDate) {
            return gmmktime(
                $parsedDate["hour"],
                $parsedDate["minute"],
                $parsedDate["second"],
                $parsedDate["month"],
                $parsedDate["day"],
                $parsedDate["year"]
            );
        } else {
            return mktime(
                $parsedDate["hour"],
                $parsedDate["minute"],
                $parsedDate["second"],
                $parsedDate["month"],
                $parsedDate["day"],
                $parsedDate["year"]
            );
        }
    }

    static public function getDayOfWeek($timestamp) {
        $weekDay = getdate($timestamp)["wday"];
        return $weekDay;
    }

    static public function addDate($timestamp, $unit, $count) {
        $dateUnits = self::$DATE_UNITS;
        $units = array(
            $dateUnits["hour"],
            $dateUnits["minute"],
            $dateUnits["second"],
            $dateUnits["month"],
            $dateUnits["day"],
            $dateUnits["year"]
        );
        $args = array();

        for($i = 0; $i < count($units); $i++){
            $time_part = $units[$i];
            $param = date($time_part, $timestamp);
            if($unit == $time_part)
                $param += $count;

            array_push($args, $param);

        }

        return call_user_func_array("mktime", $args);
    }

    static public function addDays($timestamp, $count) {
        return self::addDate($timestamp, self::$DATE_UNITS["day"], $count);
    }

    static public function addWeeks($timestamp, $count) {
        return self::addDate($timestamp, self::$DATE_UNITS["day"], ($count * self::DAYS_IN_WEEK));
    }

    static public function addMonths($timestamp, $count) {
        return self::addDate($timestamp, self::$DATE_UNITS["month"], $count);
    }

    static public function addYears($timestamp, $count) {
        return self::addDate($timestamp, self::$DATE_UNITS["year"], $count);
    }

}