Как преобразовать строку метки времени, содержащую дату и время в этом формате, в формат PHP DateTime? - PullRequest
0 голосов
/ 13 мая 2018

У меня есть строка метки времени, которая содержит дату и время в таком формате:

$time == "Apr  3, 2015 16:58:46.461897000";

Мне нужно преобразовать его в объект DateTime в PHP, чтобы я мог выполнять дальнейшие операции надЭто.

Поскольку этот формат отсутствует в списке поддерживаемых форматов .

Итак, вопрос в том, как мне добиться того, что мне нужно?

Я имею в виду, что данная строка содержит дату и время в таком формате, как Короткое имя месяца Дата, Год Часы: Минуты: секунды .Мне нужно, чтобы эта строка была преобразована в PHP DateTime объект.

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Попробуйте это;

<?php

$date=date_create_from_format("M  j, Y H:i:s.u???","Apr  3, 2015 16:58:46.461897000");

echo date_format($date,"M j Y H i s u");

?>
0 голосов
/ 13 мая 2018

Вот пошаговый процедурный php-скрипт:

<code>// Declare the string
$DateTime_String = "Apr 3, 2015 16:58:46.461897000";

// Convert the string into an array
$DateTime_Array = explode(' ', $DateTime_String);

// Create a new $Time_Array containing one element each for hours, minutes and seconds
$Time_Array = explode(':', $DateTime_Array[3]);

// Remove Hours:Minutes:Seconds element from $DateTime_Array
array_splice($DateTime_Array, 3, 1);

// Concatenate the two arrays
$DateTime_Array = array_merge($DateTime_Array, $Time_Array);

// Convert Simple Ordinal Array into Associative Array
$DateTime_Units = array('Month', 'Day', 'Year', 'Hour', 'Minute', 'Second');
$DateTime_Array = array_combine($DateTime_Units, $DateTime_Array);

// Lose the trailing comma on $DateTime_Array['Day']
$DateTime_Array['Day'] = str_replace(',', '', $DateTime_Array['Day']);

// Add a leading 0 to $DateTime_Array['Day'] (if necessary)
$DateTime_Array['Day'] = '0'.$DateTime_Array['Day'];
$DateTime_Array['Day'] = substr($DateTime_Array['Day'], -2, 2);

// Convert Month Shortname into two digit integer
$DateTime_Array['Month'] = date('m', strtotime($DateTime_Array['Month']));

// Build $New_DateTime_String
$New_DateTime_String;
$New_DateTime_String .= $DateTime_Array['Year'].'-';
$New_DateTime_String .= $DateTime_Array['Month'].'-';
$New_DateTime_String .= $DateTime_Array['Day'].' ';

$New_DateTime_String .= $DateTime_Array['Hour'].':';
$New_DateTime_String .= $DateTime_Array['Minute'].':';
$New_DateTime_String .= $DateTime_Array['Second'];


echo '<pre>';
echo '<p>'.$DateTime_String.'<p>'; 
print_r($DateTime_Array);
echo '<p>'.$New_DateTime_String.'<p>'; 
echo '
';
0 голосов
/ 13 мая 2018

Если вы можете безопасно отбросить наносекунды, вы можете использовать случайный байт код формата для учета дополнительных цифр:

$input = 'Apr  3, 2015 16:58:46.461897000';
$output = DateTime::createFromFormat('M j, Y G:i:s.u???', $input);
var_dump($input, $output);
string(31) "Apr  3, 2015 16:58:46.461897000"
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2015-04-03 16:58:46.461897"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Madrid"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...