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