79 lines
2.4 KiB
PHP
Executable File
79 lines
2.4 KiB
PHP
Executable File
#!/usr/bin/php
|
|
<?php
|
|
require $_composer_autoload_path?? __DIR__.'/../vendor/autoload.php';
|
|
|
|
use nur\b\IllegalAccessException;
|
|
use nur\cli\Application;
|
|
use nur\b\date\Datetime;
|
|
use nur\data\types\SDatetimeType;
|
|
|
|
Application::run(new class extends Application {
|
|
const TIMESTAMP = 0;
|
|
const DATETIME = 1;
|
|
|
|
const ARGS = [
|
|
"purpose" => "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";
|
|
}
|
|
}
|
|
}); |