SortByDateField.php
2.95 KB
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
<?php
/*
"Contact Form to Database" Copyright (C) 2011-2012 Michael Simpson (email : michael.d.simpson@gmail.com)
This file is part of Contact Form to Database.
Contact Form to Database is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Contact Form to Database is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Contact Form to Database.
If not, see <http://www.gnu.org/licenses/>.
*/
require_once('SortTransform.php');
class SortByDateField extends SortTransform {
var $fieldName;
var $dateFormat;
var $ascDesc;
function __construct($fieldName, $ascDesc = 'ASC', $dateFormat = null) {
$this->ascDesc = strtoupper($ascDesc);
$this->dateFormat = $dateFormat;
$this->fieldName = $fieldName;
}
public function sort($a, $b) {
$aTimeString = isset($a[$this->fieldName]) ? $a[$this->fieldName] : null;
$bTimeString = isset($b[$this->fieldName]) ? $b[$this->fieldName] : null;
if ($this->dateFormat == null) {
$aTime = strtotime($aTimeString);
$bTime = strtotime($bTimeString);
} else {
$aTime = $this->parseToTimeStamp($this->dateFormat, $aTimeString);
$bTime = $this->parseToTimeStamp($this->dateFormat, $bTimeString);
}
$sortVal = 0;
// Unset time come before set ones
if (!$aTime && $bTime) {
$sortVal = 1;
} else if ($aTime && !$bTime) {
$sortVal = -1;
}
if ($aTime < $bTime) $sortVal = -1;
if ($aTime > $bTime) $sortVal = 1;
if ($this->ascDesc == 'DESC') {
$sortVal *= -1;
}
return $sortVal;
}
/**
* @param $format string date format
* @param $dateString
* @return int|null timestamp or null if can't parse
*/
public function parseToTimeStamp($format, $dateString) {
if ($dateString === null) {
return null;
}
// Requires PHP >= 5.3.0
$t = date_parse_from_format($format, $dateString);
if (isset($t['hour']) &&
isset($t['minute']) &&
isset($t['second']) &&
isset($t['month']) &&
isset($t['day']) &&
isset($t['year'])
) {
return mktime(
$t['hour'],
$t['minute'],
$t['second'],
$t['month'],
$t['day'],
$t['year']);
} else {
return null;
}
}
}