Open Journal Systems  3.3.0
DateHelper.php
1 <?php
2 /*
3  * citeproc-php
4  *
5  * @link http://github.com/seboettg/citeproc-php for the source repository
6  * @copyright Copyright (c) 2016 Sebastian Böttger.
7  * @license https://opensource.org/licenses/MIT
8  */
9 
10 namespace Seboettg\CiteProc\Util;
11 
12 use DateTime;
13 use Exception;
16 
27 {
28 
39  public static function serializeDate($dateParts)
40  {
41  $year = isset($dateParts[0]) ? $dateParts[0] : "0000";
42  $month = isset($dateParts[1]) ? $dateParts[1] : "00";
43  $day = isset($dateParts[2]) ? $dateParts[2] : "00";
44 
45  return sprintf("%04d%02d%02d", $year, $month, $day);
46  }
47 
53  public static function parseDateParts($date)
54  {
55  if (!isset($date->{'raw'})) {
56  return [];
57  }
58  try {
59  $dateTime = new DateTime($date->{'raw'});
60  $arr = [[$dateTime->format("Y"), $dateTime->format("m"), $dateTime->format("d")]];
61  } catch (Exception $e) {
62  throw new CiteProcException("Could not parse date \"".$date->{'raw'}."\".", 0, $e);
63  }
64 
65  return $arr;
66  }
67 
75  public static function getSortKeyDate($dataItem, $key)
76  {
77  $variable = $variable = $key->getVariable();
78  $part = $key->getRangePart();
79  if (count($dataItem->{$variable}->{'date-parts'}) > 1) {
80  //Date range
81  $datePart = $dataItem->{$variable}->{'date-parts'}[$part];
82  $sortKey = self::serializeDate($datePart);
83  if ($key->getSort() === "descending" && $part === 0 ||
84  $key->getSort() === "ascending" && $part === 1) {
85  $sortKey .= "-";
86  }
87  } else {
88  if (!isset($dataItem->{$variable}->{'date-parts'})) {
89  $dateParts = self::parseDateParts($dataItem->{$variable});
90  } else {
91  $dateParts = $dataItem->{$variable}->{'date-parts'}[0];
92  }
93  $sortKey = self::serializeDate($dateParts);
94  }
95  return $sortKey;
96  }
97 
104  public static function hasDateRanges($items, $variable, $match = "all")
105  {
106  $ret = true;
107  foreach ($items as $item) {
108  $dateParts = $item->{$variable}->{"date-parts"};
109  if ($match === "all" && count($dateParts) !== 2) {
110  return false;
111  } elseif ($match === "any" && count($dateParts) === 2) {
112  return true;
113  } else {
114  $ret = ($match === "all") ? $ret&true : $ret|true;
115  }
116  }
117  return (bool) $ret;
118  }
119 }
Seboettg\CiteProc\Util\DateHelper
Definition: DateHelper.php:26
Seboettg\CiteProc\Util\DateHelper\serializeDate
static serializeDate($dateParts)
Definition: DateHelper.php:39
Seboettg\CiteProc\Exception\CiteProcException
Definition: CiteProcException.php:20
Seboettg\CiteProc\Util\DateHelper\parseDateParts
static parseDateParts($date)
Definition: DateHelper.php:53
Seboettg\CiteProc\Util
Definition: CiteProcHelper.php:10
Seboettg\CiteProc\Style\Sort\Key
Definition: Key.php:30
Seboettg\CiteProc\Util\DateHelper\hasDateRanges
static hasDateRanges($items, $variable, $match="all")
Definition: DateHelper.php:104
Seboettg\CiteProc\Util\DateHelper\getSortKeyDate
static getSortKeyDate($dataItem, $key)
Definition: DateHelper.php:75