PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.23.0
Independent Analytics – WordPress Analytics Plugin v1.23.0
2.15.5 2.15.4 2.15.3 2.15.2 2.15.1 2.15.0 2.14.10 trunk 1.1 1.10 1.10.1 1.11 1.12 1.13 1.14 1.15 1.16 1.17 1.17.1 1.17.2 1.17.3 1.17.4 1.18 1.18.1 1.19.0 1.19.1 1.2 1.20.0 1.21.0 1.22.0 1.22.1 1.23.0 1.23.1 1.24.0 1.24.1 1.25.0 1.25.1 1.26.0 1.27.0 1.28.0 1.28.1 1.28.2 1.28.3 1.29.0 1.3 1.30.0 1.30.1 1.4 1.5 1.6 1.7 1.8 1.9 2.0.0 2.0.1 2.1.4 2.1.5 2.1.6 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.10 2.11.2 2.11.3 2.11.4 2.11.5 2.11.6 2.11.7 2.11.8 2.11.9 2.12.0 2.12.1 2.12.2 2.13.1 2.13.2 2.13.5 2.13.6 2.14.0 2.14.1 2.14.2 2.14.4 2.14.6 2.14.7 2.14.8 2.14.9 2.2.0 2.2.1 2.3.1 2.3.2 2.4.2 2.4.3 2.5.0 2.5.1 2.6.0 2.6.1 2.6.2 2.6.3 2.6.4 2.7.0 2.7.1 2.7.2 2.7.3 2.8.2 2.8.3 2.8.4 2.8.5 2.8.6 2.8.7 2.8.8 2.8.9 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7
independent-analytics / IAWP / Date_Range / Date_Range.php
independent-analytics / IAWP / Date_Range Last commit date
Date_Range.php 3 years ago Exact_Date_Range.php 3 years ago Relative_Date_Range.php 3 years ago
Date_Range.php
123 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Date_Range;
4
5 use IAWP_SCOPED\IAWP\Utils\Timezone;
6 use DateTime;
7 abstract class Date_Range
8 {
9 /**
10 * @var DateTime
11 */
12 protected $start;
13 /**
14 * @var DateTime
15 */
16 protected $end;
17 public abstract function label() : string;
18 protected function set_range(DateTime $start, DateTime $end, bool $convert_to_full_days)
19 {
20 $start = clone $start;
21 $end = clone $end;
22 if ($convert_to_full_days) {
23 $start = $this->start_of_locale_day($start);
24 $end = $this->end_of_locale_day($end);
25 }
26 $this->start = $start;
27 $this->end = $end;
28 }
29 /**
30 * @return DateTime
31 */
32 public function start() : DateTime
33 {
34 return $this->start;
35 }
36 /**
37 * @return string
38 */
39 public function iso_start() : string
40 {
41 return $this->start->format('c');
42 }
43 /**
44 * @return DateTime
45 */
46 public function end() : DateTime
47 {
48 return $this->end;
49 }
50 /**
51 * @return string
52 */
53 public function iso_end() : string
54 {
55 return $this->end->format('c');
56 }
57 /**
58 * @return DateTime
59 */
60 public function previous_period_start() : DateTime
61 {
62 $previous_start = clone $this->start;
63 $range_size = $this->range_size_in_days();
64 return $previous_start->modify("-{$range_size} days");
65 }
66 /**
67 * @return string
68 */
69 public function previous_period_iso_start() : string
70 {
71 return $this->previous_period_start()->format('c');
72 }
73 /**
74 * @return DateTime
75 */
76 public function previous_period_end() : DateTime
77 {
78 $previous_end = clone $this->end;
79 $range_size = $this->range_size_in_days();
80 return $previous_end->modify("-{$range_size} days");
81 }
82 /**
83 * @return string
84 */
85 public function previous_period_iso_end() : string
86 {
87 return $this->previous_period_end()->format('c');
88 }
89 /**
90 * Return the range size in days for previous period calculations
91 *
92 * @return int
93 */
94 private function range_size_in_days() : int
95 {
96 return $this->start->diff($this->end)->days + 1;
97 }
98 /**
99 * Return a new DateTime representing the start of the day in the users timezone
100 *
101 * @param DateTime $datetime
102 *
103 * @return DateTime
104 */
105 private function start_of_locale_day(\DateTime $datetime) : \DateTime
106 {
107 $datetime = clone $datetime;
108 return $datetime->setTimezone(Timezone::wordpress_site_timezone())->setTime(0, 0, 0)->setTimezone(Timezone::utc_timezone());
109 }
110 /**
111 * Return a new DateTime representing the end of the day in the users timezone
112 *
113 * @param DateTime $datetime
114 *
115 * @return DateTime
116 */
117 private function end_of_locale_day(\DateTime $datetime) : \DateTime
118 {
119 $datetime = clone $datetime;
120 return $datetime->setTimezone(Timezone::wordpress_site_timezone())->setTime(23, 59, 59)->setTimezone(Timezone::utc_timezone());
121 }
122 }
123