summaryrefslogtreecommitdiff
path: root/app/Libraries/Zeitumstellung.php
diff options
context:
space:
mode:
Diffstat (limited to 'app/Libraries/Zeitumstellung.php')
-rw-r--r--app/Libraries/Zeitumstellung.php104
1 files changed, 104 insertions, 0 deletions
diff --git a/app/Libraries/Zeitumstellung.php b/app/Libraries/Zeitumstellung.php
new file mode 100644
index 0000000..17daa08
--- /dev/null
+++ b/app/Libraries/Zeitumstellung.php
@@ -0,0 +1,104 @@
+<?php
+namespace App\Libraries;
+use App\Libraries\Zeitumstellung;
+
+use Carbon\Carbon;
+
+class Zeitumstellung {
+
+ // full date of the next time change
+ public $date;
+ public $dateText;
+ // number of days since last time change
+ public $daysago;
+ // number of days until next time change. if zero, time change is today!
+ public $daysuntil;
+
+ public $description;
+ public $descriptionHTML;
+
+ public $day;
+ public $month;
+ public $monthText;
+ public $year;
+
+ public $now;
+
+ private $tc_march;
+ private $tc_oct;
+
+ function __construct() {
+ # debug
+ #Carbon::setTestNow( Carbon::create(2018, 10, 28, 2) );
+ #Carbon::setTestNow( Carbon::create(2020, 03, 30, 5) );
+
+ $this->now = Carbon::now()->startOfDay();
+
+ $this->year = $this->now->year;
+
+ # detect if next time change is next year
+ if ( $this->now->gt( Carbon::parse('last sunday of october')->startOfDay() ) ){
+ $this->year = $this->year+1;
+ }
+
+ $this->tc_march = Carbon::parse('last sunday of march ' . $this->year )->startOfDay();
+ $this->tc_oct = Carbon::parse('last sunday of october ' . $this->year)->startOfDay();
+
+ if ( $this->now->lte($this->tc_march) ){
+ # next time change is in march this year, (last sunday in october)
+
+ $this->date = $this->tc_march;
+ $this->description = 'Die Uhr wird von 2 Uhr auf 3 Uhr vorgestellt, sodass wir 1 Stunde weniger schlafen.';
+ $this->descriptionHTML = 'Die Uhr wird von 2 Uhr auf 3 Uhr vorgestellt, sodass wir <b>1 Stunde weniger</b> schlafen.';
+
+ # detect if last time change was last year
+ if ( $this->now->lt( Carbon::parse('last sunday of march ') ) ) {
+ $this->year = $this->now->year - 1;
+ $this->daysago = Carbon::parse('last sunday of october' . $this->year)->diffInDays( $this->now );
+ } else {
+ $this->daysago = $this->tc_oct->diffInDays( $this->now );
+ }
+
+ } else {
+ # next time change is in october this year, (last sunday in october)
+
+ $this->date = $this->tc_oct;
+ $this->description = 'Die Uhr wird von 3 Uhr auf 2 Uhr zurückgestellt, sodass wir 1 Stunde länger schlafen.';
+ $this->descriptionHTML = 'Die Uhr wird von 3 Uhr auf 2 Uhr zurückgestellt, sodass wir <b>1 Stunde länger</b> schlafen.';
+
+ $this->daysago = $this->tc_march->diffInDays( $this->now );
+ }
+
+ $this->dateText = $this->date->toDateString();
+
+ $this->daysuntil = $this->date->diffInDays($this->now);
+
+ $this->day = $this->date->day;
+ $this->month = $this->date->month;
+ $this->year = $this->date->year;
+
+ if ( 3 == $this->month ) {
+ $this->monthText = "März";
+ } else {
+ $this->monthText = "Oktober";
+ }
+ }
+
+ public function getData(){
+ $result = array();
+
+ $result["date"] = $this->date->toDateString();
+ $result["day"] = $this->date->day;
+ $result["month"] = $this->date->month;
+ $result["monthText"] = $this->monthText;
+ $result["year"] = $this->date->year;
+ $result["daysuntil"] = $this->daysuntil;
+ $result["daysago"] = $this->daysago;
+ $result["now"] = $this->now->toDateString();
+
+ return $result;
+ }
+ public function getJSON(){
+ return json_encode( $this->getData() );
+ }
+}