1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
<?php
use Prado\Util\TDateTimeStamp;
/**
* @package System.Util
*/
class TDateTimeStampTest extends PHPUnit_Framework_TestCase {
public function testGetTimeStampAndFormat() {
$s = new TDateTimeStamp;
$t = $s->getTimeStamp(0,0,0);
$this->assertEquals($s->formatDate('Y-m-d',$t), date('Y-m-d'));
$t = $s->getTimeStamp(0,0,0,6,1,2102);
$this->assertEquals($s->formatDate('Y-m-d',$t), '2102-06-01');
$t = $s->getTimeStamp(0,0,0,2,1,2102);
$this->assertEquals($s->formatDate('Y-m-d',$t), '2102-02-01');
}
public function testOverFlow() {
$s = new TDateTimeStamp;
$t = $s->getTimeStamp(0,0,0,3,33,1965);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1965-04-02', 'Error in day overflow 1');
$t = $s->getTimeStamp(0,0,0,4,33,1971);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1971-05-03', 'Error in day overflow 2');
$t = $s->getTimeStamp(0,0,0,1,60,1965);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1965-03-01', 'Error in day overflow 3 '.$s->formatDate('Y-m-d',$t));
$t = $s->getTimeStamp(0,0,0,12,32,1965);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1966-01-01', 'Error in day overflow 4 '.$s->formatDate('Y-m-d',$t));
$t = $s->getTimeStamp(0,0,0,12,63,1965);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1966-02-01', 'Error in day overflow 5 '.$s->formatDate('Y-m-d',$t));
$t = $s->getTimeStamp(0,0,0,13,3,1965);
$this->assertEquals($s->formatDate('Y-m-d',$t), '1966-01-03', 'Error in math overflow 1');
}
public function test2DigitTo4DigitYearConversion() {
$s = new TDateTimeStamp;
$this->assertEquals($s->get4DigitYear(00), 2000, "Err 2-digit 2000");
$this->assertEquals($s->get4DigitYear(10), 2010, "Err 2-digit 2010");
$this->assertEquals($s->get4DigitYear(20), 2020, "Err 2-digit 2020");
$this->assertEquals($s->get4DigitYear(30), 2030, "Err 2-digit 2030");
$this->assertEquals($s->get4DigitYear(40), 2040, "Err 2-digit 2040");
$this->assertEquals($s->get4DigitYear(50), 1950, "Err 2-digit 1950");
$this->assertEquals($s->get4DigitYear(90), 1990, "Err 2-digit 1990");
}
public function testStringFormating() {
$s = new TDateTimeStamp;
$fmt = '\d\a\t\e T Y-m-d H:i:s a A d D F g G h H i j l L m M n O \R\F\C2822 r s t U w y Y z Z 2003';
$s1 = date($fmt,0);
$s2 = $s->formatDate($fmt,0);
$this->assertEquals($s1, $s2);//, " date() 0 failed \n $s1 \n $s2");
for ($i=10; --$i > 0; ) {
$ts = 3600.0*((rand()%60000)+(rand()%60000))+(rand()%60000);
$s1 = date($fmt,$ts);
$s2 = $s->formatDate($fmt,$ts);
//print "$s1 <br>$s2 <p>";
$this->assertEquals($s1,$s2);
$a1 = getdate($ts);
$a2 = $s->getDate($ts,false);
$this->assertEquals($a1,$a2);
}
}
public function testRandomDatesBetween1000And4000() {
$this->assertIsValidDate(1000,1);
//echo "Testing year ";
for ($i=10; --$i >= 0;) {
$y1 = 1000+rand(0,1970-1000);
//echo $y1." ";
$m = rand(1,12);
$this->assertIsValidDate($y1,$m);
$y1 = 3000-rand(0,3000-1970);
//echo $y1." ";
$this->assertIsValidDate($y1,$m);
}
}
public function assertIsValidDate($y1,$m,$d=13) {
$s = new TDateTimeStamp;
$t = $s->getTimeStamp(0,0,0,$m,$d,$y1);
$rez = $s->formatDate('Y-n-j H:i:s',$t);
$this->assertEquals("$y1-$m-$d 00:00:00", $rez);
}
function testRandomDates() {
$start = 1960+rand(0,10);
$yrs = 12;
$i = 365.25*86400*($start-1970);
$offset = 36000+rand(10000,60000);
$max = 365*$yrs*86400;
$lastyear = 0;
$s = new TDateTimeStamp;
// we generate a timestamp, convert it to a date, and convert it back to a timestamp
// and check if the roundtrip broke the original timestamp value.
//print "Testing $start to ".($start+$yrs).", or $max seconds, offset=$offset: ";
$fails = 0;
for ($max += $i; $i < $max; $i += $offset) {
$ret = $s->formatDate('m,d,Y,H,i,s',$i);
$arr = explode(',',$ret);
if ($lastyear != $arr[2])
$lastyear = $arr[2];
$newi = $s->getTimestamp($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]);
if ($i != $newi) {
// This actually can fail if $i is in the middle of a time change due to DST
$tz = new DateTimeZone(date_default_timezone_get());
$transitions = $tz->getTransitions($i-3600, $i+3600);
if(count($transitions) == 0)
$fails++;
//$j = mktime($arr[3],$arr[4],$arr[5],$arr[0],$arr[1],$arr[2]);
//print "Error at $i, $j, getTimestamp() returned $newi ($ret)\n";
}
}
$this->assertEquals($fails, 0);
}
}
|