#!/usr/bin/php "analyser une date source et la convertir dans un format destination", "usage" => "[-t|-d] SOURCES...", ["--st", "--timestamp", "name" => "input_format", "value" => self::TIMESTAMP, "help" => "la source est un timestamp", ], ["--sd", "--datetime", "name" => "input_format", "value" => self::DATETIME, "help" => "la source est une date", ], ["-t", "--show-timestamp", "name" => "output_format", "value" => self::TIMESTAMP, "help" => "afficher le timestamp", ], ["-d", "--show-datetime", "name" => "output_format", "value" => self::DATETIME, "help" => "afficher la date", ], ]; private $inputFormat; private $outputFormat; private $args; private function getOutputFormat(int $inputFormat): int { switch ($inputFormat) { case self::TIMESTAMP: return self::DATETIME; case self::DATETIME: return self::TIMESTAMP; default: throw IllegalAccessException::unexpected_state(); } } private function setFormats(string $arg, ?int &$inputFormat, ?int &$outputFormat): void { if ($this->inputFormat !== null) { $inputFormat = $this->inputFormat; } elseif (preg_match('/^\d+$/', $arg)) { # s'il n'y a que des chiffres, c'est un timestamp $inputFormat = self::TIMESTAMP; } else { $inputFormat = self::DATETIME; } if ($this->outputFormat !== null) $outputFormat = $this->outputFormat; else $outputFormat = $this->getOutputFormat($inputFormat); } function main() { $dt = new SDatetimeType(); $input = null; foreach ($this->args as $arg) { $this->setFormats($arg, $inputFormat, $outputFormat); switch ($inputFormat) { case self::TIMESTAMP: $input = new Datetime(intval($arg)); break; case self::DATETIME: $input = new Datetime($dt->with($arg)); } switch ($outputFormat) { case self::TIMESTAMP: $output = $input->getTime(); break; case self::DATETIME: $output = $input->format(); break; } echo "$output\n"; } } });