summaryrefslogtreecommitdiff
path: root/php/Dates.php
diff options
context:
space:
mode:
Diffstat (limited to 'php/Dates.php')
-rw-r--r--php/Dates.php105
1 files changed, 105 insertions, 0 deletions
diff --git a/php/Dates.php b/php/Dates.php
new file mode 100644
index 0000000..264166f
--- /dev/null
+++ b/php/Dates.php
@@ -0,0 +1,105 @@
1<?php
2// php/DateTimestamp.php
3
4class Dates
5{
6 private $date;
7 private $timestamp; // valeurs négatives autorisées => dates avant 1970
8 static public $date_format = 'EU'; // dates européennes jj-mm-aaaa (EU) ou américaines mm/dd/yyyy (US)
9
10
11 public function __construct($entry)
12 {
13 if(gettype($entry) === 'string') // une date est attendue
14 {
15 $this->setDate($entry);
16 }
17 elseif(gettype($entry) === 'integer')
18 {
19 $this->setTimestamp($entry);
20 }
21 }
22
23
24 public function setDate(string $entry)
25 {
26 $entry = $this->dashOrSlash($entry); // pour strtotime()
27
28 $splitedDate = preg_split('#\D#', $entry); // \D = tout sauf chiffre
29
30 if(self::$date_format === 'EU')
31 {
32 $tmp = $splitedDate[0];
33 $splitedDate[0] = $splitedDate[1];
34 $splitedDate[1] = $tmp;
35 }
36
37 if(checkdate($splitedDate[0], $splitedDate[1], $splitedDate[2]))
38 {
39 $this->date = $entry;
40 $this->timestamp = strtotime($entry); // date (string) -> timestamp (int)
41 // strtotime() devine le format en analysant la chaîne en entrée, on l'aide un peu
42 // avec des /, php considère que la date est américaine
43 // avec des - ou des ., php considère que la date est européenne
44 }
45 else
46 {
47 echo("Date incorrecte, le format de la date dans le fichier config.php est " . self::$date_format . ".\nLes choix possibles sont EU pour Europe et US pour États-Unis.");
48 die();
49 }
50 }
51
52 public function setTimestamp(int $entry)
53 {
54 $this->timestamp = $entry;
55 $this->date = $this->timestamp_to_date($entry); // timestamp (int) -> date (string)
56 }
57
58
59 public function getDate(): string
60 {
61 return($this->date);
62 }
63
64 public function getTimestamp(): int
65 {
66 return($this->timestamp);
67 }
68
69
70 private function dashOrSlash(string $date): string
71 {
72 if(self::$date_format === 'EU')
73 {
74 // change jj/mm/aaaa en jj-mm-aaaa
75 return(preg_replace('#\D#', '-', $date)); // \D = tout sauf chiffre
76 }
77 elseif(self::$date_format === 'US')
78 {
79 // change mm-dd.yyyy en mm/dd/yyyy
80 return(preg_replace('#\D#', '/', $date));
81 }
82 else
83 {
84 echo('Le fichier config.php comporte une erreur. La variable $date_format doit avoir pour valeur "EU" ou "US"');
85 die(); // brutal
86 }
87 }
88
89 private function timestamp_to_date(int $timestamp): string
90 {
91 if(self::$date_format === 'EU')
92 {
93 return(date("j-m-Y", $timestamp));
94 }
95 elseif(self::$date_format === 'US')
96 {
97 return(date("m/d/Y", $timestamp));
98 }
99 else
100 {
101 echo('Le fichier config.php comporte une erreur. La variable $date_format doit avoir pour valeur "EU" ou "US"');
102 die(); // brutal
103 }
104 }
105}