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 / Relative_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
Relative_Date_Range.php
153 lines
1 <?php
2
3 namespace IAWP_SCOPED\IAWP\Date_Range;
4
5 use DateTime;
6 use IAWP_SCOPED\IAWP\Utils\Timezone;
7 class Relative_Date_Range extends Date_Range
8 {
9 /**
10 * @var string
11 */
12 private $label;
13 /**
14 * @var string
15 */
16 private $relative_range_id = 'LAST_THIRTY';
17 private const VALID_RELATIVE_RANGE_IDS = ['TODAY', 'YESTERDAY', 'LAST_SEVEN', 'LAST_THIRTY', 'THIS_WEEK', 'LAST_WEEK', 'THIS_MONTH', 'LAST_MONTH', 'THIS_YEAR', 'LAST_YEAR'];
18 /**
19 * @param string $relative_range_id A valid range id such as LAST_MONTH
20 * @param bool $convert_to_full_days
21 */
22 public function __construct(string $relative_range_id, bool $convert_to_full_days = \true)
23 {
24 if (\in_array($relative_range_id, self::VALID_RELATIVE_RANGE_IDS)) {
25 $this->relative_range_id = $relative_range_id;
26 }
27 // Call the method whose name matches the relative range id
28 $method_name = \strtolower($relative_range_id);
29 list($start, $end, $label) = $this->{$method_name}();
30 $this->set_range($start, $end, $convert_to_full_days);
31 $this->label = $label;
32 }
33 /**
34 * Get the id of the current range such as THIS_YEAR
35 *
36 * @return string
37 */
38 public function relative_range_id() : string
39 {
40 return $this->relative_range_id;
41 }
42 public function label() : string
43 {
44 return $this->label;
45 }
46 /**
47 * Returns an array of relative ranges representing all supported ranges
48 *
49 * @return Relative_Date_Range[]
50 */
51 public static function ranges() : array
52 {
53 return \array_map(function (string $range_id) {
54 return new self($range_id);
55 }, self::VALID_RELATIVE_RANGE_IDS);
56 }
57 /**
58 * @param string $relative_range_id
59 *
60 * @return bool
61 */
62 public static function is_valid_range(string $relative_range_id) : bool
63 {
64 if (\in_array($relative_range_id, self::VALID_RELATIVE_RANGE_IDS)) {
65 return \true;
66 }
67 return \false;
68 }
69 private function today() : array
70 {
71 $tz = Timezone::wordpress_site_timezone();
72 $today = new DateTime('now', $tz);
73 return [$today, $today, \__('Today', 'iawp')];
74 }
75 private function yesterday() : array
76 {
77 $tz = Timezone::wordpress_site_timezone();
78 $yesterday = new DateTime('-1 day', $tz);
79 return [$yesterday, $yesterday, \__('Yesterday', 'iawp')];
80 }
81 private function last_seven() : array
82 {
83 $tz = Timezone::wordpress_site_timezone();
84 $today = new DateTime('now', $tz);
85 $seven_days_ago = new DateTime('-6 days', $tz);
86 return [$seven_days_ago, $today, \__('Last 7 Days', 'iawp')];
87 }
88 private function last_thirty() : array
89 {
90 $tz = Timezone::wordpress_site_timezone();
91 $today = new DateTime('now', $tz);
92 $thirty_days_ago = new DateTime('-29 days', $tz);
93 return [$thirty_days_ago, $today, \__('Last 30 Days', 'iawp')];
94 }
95 private function this_week() : array
96 {
97 $tz = Timezone::wordpress_site_timezone();
98 $today = new DateTime('now', $tz);
99 $firstDayOfWeek = \intval(\get_option('iawp_dow'));
100 $currentDayOfWeek = \intval($today->format('w'));
101 $startOfWeekDaysAgo = $currentDayOfWeek - $firstDayOfWeek;
102 if ($startOfWeekDaysAgo < 0) {
103 $startOfWeekDaysAgo += 7;
104 }
105 $startOfWeek = new DateTime("-{$startOfWeekDaysAgo} days", $tz);
106 $endOfWeek = (clone $startOfWeek)->modify('+6 days');
107 return [$startOfWeek, $endOfWeek, \__('This Week', 'iawp')];
108 }
109 private function last_week() : array
110 {
111 list($start, $end) = $this->this_week();
112 $startOfWeek = $start->modify('-7 days');
113 $endOfWeek = $end->modify('-7 days');
114 return [$startOfWeek, $endOfWeek, \__('Last Week', 'iawp')];
115 }
116 private function this_month() : array
117 {
118 $tz = Timezone::wordpress_site_timezone();
119 $today = new DateTime('now', $tz);
120 $day_of_month = \intval($today->format('d')) - 1;
121 $days_in_month = \intval($today->format('t')) - 1;
122 $start_of_month = (clone $today)->modify("-{$day_of_month} days");
123 $end_of_month = (clone $start_of_month)->modify("+{$days_in_month} days");
124 return [$start_of_month, $end_of_month, \__('This Month', 'iawp')];
125 }
126 private function last_month() : array
127 {
128 list($start, $end) = $this->this_month();
129 $start_of_last_month = (clone $start)->modify('-1 month');
130 $days_in_last_month = \intval($start_of_last_month->format('t')) - 1;
131 $end_of_last_month = (clone $start_of_last_month)->modify("+{$days_in_last_month} days");
132 return [$start_of_last_month, $end_of_last_month, \__('Last Month', 'iawp')];
133 }
134 private function this_year() : array
135 {
136 $tz = Timezone::wordpress_site_timezone();
137 $today = new DateTime('now', $tz);
138 $year = \intval($today->format('Y'));
139 $start_of_year = (clone $today)->setDate($year, 1, 1);
140 $end_of_year = (clone $today)->setDate($year, 12, 31);
141 return [$start_of_year, $end_of_year, \__('This Year', 'iawp')];
142 }
143 private function last_year() : array
144 {
145 $tz = Timezone::wordpress_site_timezone();
146 $today = new DateTime('now', $tz);
147 $last_year = \intval($today->format('Y')) - 1;
148 $start_of_last_year = (clone $today)->setDate($last_year, 1, 1);
149 $end_of_last_year = (clone $today)->setDate($last_year, 12, 31);
150 return [$start_of_last_year, $end_of_last_year, \__('Last Year', 'iawp')];
151 }
152 }
153