Как преобразовать массив в формат даты в PHP? - PullRequest
1 голос
/ 08 мая 2019

Я получаю массив в PHP как:

Array
(
    [1] => 2019
    [2] => 5
    [3] => 7
    [4] => 0
)

где [1] - это всегда год, [2] - всегда месяц, а [3] - всегда дата.

Как мне преобразовать этот массив в date("Y-m-d") формат?

Ответы [ 5 ]

1 голос
/ 08 мая 2019

При условии ввода этих данных:

$data = [null, 2019, 5, 7, 0];

Использование DateTime

$dt = new DateTime(sprintf( "%04d-%02d-%02d", $data[1], $data[2], 
$data[3]));
echo $dt->format('Y-m-d') . "\n";

Использование Sprintf

// use this if you really trust the data
$dt = sprintf( "%04d-%02d-%02d", $data[0], $data[1], $data[2]);
echo $dt . "\n";

Использование углерода

// Carbon is a fantastic Date and Time class -> https://carbon.nesbot.com/
$dt = \Carbon\Carbon::create($data[0], $data[1], $data[2], 0, 0, 0);
echo $dt->format('Y-m-d') . "\n";
1 голос
/ 08 мая 2019

Хотя можно просто объединить эти значения в строку и затем разрешить PHP разобрать эту строку в формате Y-m-d, я лично считаю, что mktime() является лучшим решением:

echo date("Y-m-d", mktime(0, 0, 0, $arr[2], $arr[3], $arr[1]));
// 2019-05-07

Это удаляетриск того, что PHP случайно интерпретирует день и месяц в неправильном порядке.

1 голос
/ 08 мая 2019

Сделай так

$arr = array( '2019', '5', '7', '0' );
echo date('Y-m-d',strtotime("$arr[0]/$arr[1]/$arr[2]"));
1 голос
/ 08 мая 2019

вы можете использовать DateTime

$timeArray = [2019,5,7,0];
$dateTime = new DateTime(printf( "%d-%d-%d", $timeArray[0],$timeArray[1],$timeArray[2] ));
echo $dateTime->format('Y-m-d'); // output: 2019-05-07
0 голосов
/ 08 мая 2019

Вы можете просто использовать concat и объединить их в строку:

$arr = array(
    "1" => "2019",
    "2" => "5",
    "3" => "7",
    "4" => "0",
);

$datetime_format = $arr["1"] . "-" . $arr["2"] . "-" . $arr["3"];

var_dump($datetime_format);

Вывод

string(8) "2019-5-7"

Если вы хотите использовать формат 4-2-2, это может работать:

$arr = array(
    "1" => "2019",
    "2" => "5",
    "3" => "7",
    "4" => "0",
);

$datetime_format = '';
foreach ($arr as $key => $value) {
    if ($key == "4") {break;}
    echo strlen($value);
    if (strlen($value) >= 2) {
        $datetime_format .= $value;
    } elseif (strlen($value) == 2) {
        $datetime_format .= $value;
    } elseif (strlen($value) == 1) {
        $datetime_format .= "0" . $value;
    } else {
        echo "Something is not right!";
    }
    if ($key <= "2") {$datetime_format .= '-';}
}

var_dump($datetime_format);

Вывод

string(10) "2019-05-07"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...