public static function getInstance($csl_date_parts_all = NULL, $clean = TRUE) { static $instance = NULL; if (is_null($instance)) { $instance = new CSL_DateParser(); } if ($clean) { $instance->setOrderMonthDay(); $instance->resetMonths(); } if (isset($csl_date_parts_all)) { $instance->set_parts($csl_date_parts_all); } return $instance; }
function render($data, $mode) { $date_parts = array(); $date = ''; $text = ''; if (($var = $this->variable) && isset($data->{$var})) { $date_data =& $data->{$var}; $date = NULL; //$date = $date_data->{'date-parts'}[0]; if (isset($date_data->{'raw'})) { //dd($data->{$var}, 'Data'); $date = $date_data->{'raw'}; //dd($date, 'Raw date'); require_once dirname(__FILE__) . '/CSL_Dateparser.php'; $parser = CSL_DateParser::getInstance($this->elements); $parser->returnAsArray(); $date = $parser->parse($date); //dd($date, 'Parsed date'); } //TODO: This only deals with the first datepart; should be able to specify a range... if (empty($date) && !empty($date_data->date_parts[0])) { //Not raw, and date_parts in input $date = $date->date_parts[0]; } elseif (is_array($date) && array_key_exists('date-parts', $date)) { //Was raw, get the parsed date-parts $date = $date['date-parts'][0]; } if (is_array($date) && array_key_exists('literal', $date)) { $text = $date['literal']; } elseif (is_object($date) && isset($date->literal)) { $text = $date->literal; } if (empty($text) && !empty($date)) { foreach ($this->elements as $element) { $date_parts[] = $element->render($date, $mode); } $text = implode('', $date_parts); } } else { $text = $this->citeproc->get_locale('term', 'no date'); } return $this->format($text); }