PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.30.0
Independent Analytics – WordPress Analytics Plugin v1.30.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 2 years ago Exact_Date_Range.php 3 years ago Relative_Date_Range.php 2 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\Proper\Timezone;
7 class Relative_Date_Range extends Date_Range
8 {
9 private const VALID_RELATIVE_RANGE_IDS = ['TODAY', 'YESTERDAY', 'LAST_SEVEN', 'LAST_THIRTY', 'THIS_WEEK', 'LAST_WEEK', 'THIS_MONTH', 'LAST_MONTH', 'THIS_YEAR', 'LAST_YEAR'];
10 /**
11 * @var string
12 */
13 private $label;
14 /**
15 * @var string
16 */
17 private $relative_range_id = 'LAST_THIRTY';
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 private function today() : array
47 {
48 $tz = Timezone::site_timezone();
49 $today = new DateTime('now', $tz);
50 return [$today, $today, \__('Today', 'independent-analytics')];
51 }
52 private function yesterday() : array
53 {
54 $tz = Timezone::site_timezone();
55 $yesterday = new DateTime('-1 day', $tz);
56 return [$yesterday, $yesterday, \__('Yesterday', 'independent-analytics')];
57 }
58 private function last_seven() : array
59 {
60 $tz = Timezone::site_timezone();
61 $today = new DateTime('now', $tz);
62 $seven_days_ago = new DateTime('-6 days', $tz);
63 return [$seven_days_ago, $today, \__('Last 7 Days', 'independent-analytics')];
64 }
65 private function last_thirty() : array
66 {
67 $tz = Timezone::site_timezone();
68 $today = new DateTime('now', $tz);
69 $thirty_days_ago = new DateTime('-29 days', $tz);
70 return [$thirty_days_ago, $today, \__('Last 30 Days', 'independent-analytics')];
71 }
72 private function this_week() : array
73 {
74 $tz = Timezone::site_timezone();
75 $today = new DateTime('now', $tz);
76 $firstDayOfWeek = \intval(\get_option('iawp_dow'));
77 $currentDayOfWeek = \intval($today->format('w'));
78 $startOfWeekDaysAgo = $currentDayOfWeek - $firstDayOfWeek;
79 if ($startOfWeekDaysAgo < 0) {
80 $startOfWeekDaysAgo += 7;
81 }
82 $startOfWeek = new DateTime("-{$startOfWeekDaysAgo} days", $tz);
83 $endOfWeek = (clone $startOfWeek)->modify('+6 days');
84 return [$startOfWeek, $endOfWeek, \__('This Week', 'independent-analytics')];
85 }
86 private function last_week() : array
87 {
88 list($start, $end) = $this->this_week();
89 $startOfWeek = $start->modify('-7 days');
90 $endOfWeek = $end->modify('-7 days');
91 return [$startOfWeek, $endOfWeek, \__('Last Week', 'independent-analytics')];
92 }
93 private function this_month() : array
94 {
95 $tz = Timezone::site_timezone();
96 $today = new DateTime('now', $tz);
97 $day_of_month = \intval($today->format('d')) - 1;
98 $days_in_month = \intval($today->format('t')) - 1;
99 $start_of_month = (clone $today)->modify("-{$day_of_month} days");
100 $end_of_month = (clone $start_of_month)->modify("+{$days_in_month} days");
101 return [$start_of_month, $end_of_month, \__('This Month', 'independent-analytics')];
102 }
103 private function last_month() : array
104 {
105 list($start, $end) = $this->this_month();
106 $start_of_last_month = (clone $start)->modify('-1 month');
107 $days_in_last_month = \intval($start_of_last_month->format('t')) - 1;
108 $end_of_last_month = (clone $start_of_last_month)->modify("+{$days_in_last_month} days");
109 return [$start_of_last_month, $end_of_last_month, \__('Last Month', 'independent-analytics')];
110 }
111 private function this_year() : array
112 {
113 $tz = Timezone::site_timezone();
114 $today = new DateTime('now', $tz);
115 $year = \intval($today->format('Y'));
116 $start_of_year = (clone $today)->setDate($year, 1, 1);
117 $end_of_year = clone $today;
118 return [$start_of_year, $end_of_year, \__('This Year', 'independent-analytics')];
119 }
120 private function last_year() : array
121 {
122 $tz = Timezone::site_timezone();
123 $today = new DateTime('now', $tz);
124 $last_year = \intval($today->format('Y')) - 1;
125 $start_of_last_year = (clone $today)->setDate($last_year, 1, 1);
126 $end_of_last_year = (clone $today)->setDate($last_year, 12, 31);
127 return [$start_of_last_year, $end_of_last_year, \__('Last Year', 'independent-analytics')];
128 }
129 /**
130 * Returns an array of relative ranges representing all supported ranges
131 *
132 * @return Relative_Date_Range[]
133 */
134 public static function ranges() : array
135 {
136 return \array_map(function (string $range_id) {
137 return new self($range_id);
138 }, self::VALID_RELATIVE_RANGE_IDS);
139 }
140 /**
141 * @param string $relative_range_id
142 *
143 * @return bool
144 */
145 public static function is_valid_range(string $relative_range_id) : bool
146 {
147 if (\in_array($relative_range_id, self::VALID_RELATIVE_RANGE_IDS)) {
148 return \true;
149 }
150 return \false;
151 }
152 }
153