PluginProbe ʕ •ᴥ•ʔ
Independent Analytics – WordPress Analytics Plugin / 1.17
Independent Analytics – WordPress Analytics Plugin v1.17
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 / queries / range_query.php
independent-analytics / IAWP / queries Last commit date
campaigns.php 3 years ago current_traffic_finder.php 3 years ago geos.php 3 years ago range_query.php 3 years ago referrers.php 3 years ago reset_database.php 3 years ago resources.php 3 years ago view.php 3 years ago views.php 3 years ago visitors_over_time_finder.php 3 years ago
range_query.php
95 lines
1 <?php
2
3 namespace IAWP;
4
5 abstract class Range_Query
6 {
7 private $start;
8 private $end;
9 const FORMAT_PATTERN = 'Y-m-d H:i:s';
10
11 public function __construct($options = [])
12 {
13 $options = default_args($options, [
14 'start' => new \DateTime('1991-01-06'),
15 'end' => new \DateTime(),
16 'convert_to_full_days' => true,
17 ]);
18
19 $this->start = clone $options['start'];
20 $this->end = clone $options['end'];
21
22 if ($options['convert_to_full_days']) {
23 $this->start = $this->start_of_locale_day($this->start);
24 $this->end = $this->end_of_locale_day($this->end);
25 }
26 }
27
28 private function start_of_locale_day(\DateTime $datetime): \DateTime
29 {
30 $user_timezone = new \DateTimeZone(Timezone::local_offset());
31 $utc_timezone = new \DateTimeZone('UTC');
32
33 return $datetime->setTimezone($user_timezone)->setTime(0, 0, 0)->setTimezone($utc_timezone);
34 }
35
36 private function end_of_locale_day(\DateTime $datetime): \DateTime
37 {
38 $user_timezone = new \DateTimeZone(Timezone::local_offset());
39 $utc_timezone = new \DateTimeZone('UTC');
40
41 return $datetime->setTimezone($user_timezone)->setTime(23, 59, 59)->setTimezone($utc_timezone);
42 }
43
44 final public function start()
45 {
46 return $this->start;
47 }
48
49 final protected function formatted_start()
50 {
51 return $this->start->format(self::FORMAT_PATTERN);
52 }
53
54 final public function end()
55 {
56 return $this->end;
57 }
58
59 final protected function formatted_end()
60 {
61 return $this->end->format(self::FORMAT_PATTERN);
62 }
63
64 private function range_size()
65 {
66 return $this->start->diff($this->end)->days + 1;
67 }
68
69 final public function prev_period_start()
70 {
71 $prev_start = clone $this->start;
72 $range_size = $this->range_size();
73
74 return $prev_start->modify("-$range_size days");
75 }
76
77 final protected function prev_period_formatted_start()
78 {
79 return $this->prev_period_start()->format(self::FORMAT_PATTERN);
80 }
81
82 final public function prev_period_end()
83 {
84 $prev_end = clone $this->end;
85 $range_size = $this->range_size();
86
87 return $prev_end->modify("-$range_size days");
88 }
89
90 final protected function prev_period_formatted_end()
91 {
92 return $this->prev_period_end()->format(self::FORMAT_PATTERN);
93 }
94 }
95