2015-02-10 5 views
0

У меня есть исходное datetime, которое я тогда использовал подстроку, чтобы захватить каждый символ, чтобы сформировать дату-время. Теперь я хочу, чтобы это было преобразовано в соответствующую DateTime, так что если я когда-нибудь добавить 8 часов в часах он никогда не покажет выход 25, но вместо этого он будет показывать 1.конвертировать конкатенированную дату и время в datetime в php

Вот мой код для конкатенации необработанных данных

RAW DATA

$datetime = "150205172701"; 

код для того, чтобы данные ВЫШЕ DATETIME

$hour = substr($datetime, 6, 2) + 8; 
     $minutes = substr($datetime, 8, 2); 
     $second = substr($datetime, 10, 2); 
     $year = substr($datetime, 0, 2); 
     $month = substr($datetime, 2, 2); 
     $day  = substr($datetime, 4, 2); 
$findate = "20" .$year. "-" .$month. "-" .$day. " " .$hour. ":" .$minutes. ":" .$second. ".000"; 

РЕЗУЛЬТАТ БЫ 2015-02-05 25: 27: 01,000

ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ 2015-02-05 01: 27: 01,000

+1

Почему бы не использовать функцию даты? –

+0

Это похоже на очень долгий путь для этого - каковы исходные данные, из которых вы создали исходное «datetime»? – Voycey

+0

Вы указали неправильную позицию на час substr –

ответ

0
$datetime = "150205172701";  
$php_timestamp_date = date("Y-m-d H:i:s", $datetime); 
echo $php_timestamp_date; 

Попробуйте

0

попробуйте метод date_create_from_format:

$findate = date_create_from_format ("Y-m-d G:i:s" , "20" .$year. "-" .$month. "-" .$day. " " .$hour. ":" .$minutes. ":" .$second. ".000"); 

формат строка определяет требуемого формат вывод вашего DATETIME

Y - 4 цифры год
м - месяц в цифрах с ведущими нулями
я - день в номерах с ведущими нулями
G - 24 часов время с ведущим обнуляет
я - минуты с ведущими нулями
S - секунды с ведущими нулями

, если вы хотите изменить формат, проверьте http://php.net/manual/en/datetime.createfromformat.php

0

Используйте приведенный ниже код

<?php 
$datetime = 150205172701; 

     $minutes = substr($datetime, 8, 2); 
     $second = substr($datetime, 10, 2); 
     $year = substr($datetime, 0, 2); 
     $month = substr($datetime, 2, 2); 
     $day  = substr($datetime, 4, 2); 
$findate = "20" .$year. "-" .$month. "-" .$day. " " .$hour. ":" .$minutes. ":" .$second. ".000"; 
echo $findate; //2015-02-05 01:27:01.000 
?> 

Надеется, что это помогает вам

+0

есть час и как вы добавили 8 часов в часы? результат в шахте «2015-02-05 17: 27: 01.000' –

0

Я думаю, что вы ищете для этого, возьмите строку даты вы построили и добавить определенное количество времени.

<?php 
    $datetime = "150205172701"; 

    $hour = substr($datetime, 6, 2); 
    $minutes = substr($datetime, 8, 2); 
    $second = substr($datetime, 10, 2); 
    $year = substr($datetime, 0, 2); 
    $month = substr($datetime, 2, 2); 
    $day  = substr($datetime, 4, 2); 
    $findate = "20" .$year. "-" .$month. "-" .$day. " " .$hour. ":" .$minutes. ":" .$second. ".000"; 

    $date = new DateTime($findate); 
    $date->add(new DateInterval('PT08H')); //this is where you will add the amount of time 
    echo $date->format("Y-m-d G:i:s"); 
?> 

Это Выведет:

2015-02-06 1:27:01 
0

Вы должны разделим hour на 24 и даст 1, не предшествующую нулю. Итак, я ставлю условие для этого ($hour<10), затем добавьте нуль.

$datetime = "150205172701"; 
$hour = floor((substr($datetime, 6, 2) + 8)/24); 
$hour = ($hour<10)?"0".$hour : $hour; 

//Your code as it is 
$minutes = substr($datetime, 8, 2); 
$second = substr($datetime, 10, 2); 
$year = substr($datetime, 0, 2); 
$month = substr($datetime, 2, 2); 
$day  = substr($datetime, 4, 2); 
echo $findate = "20" .$year. "-" .$month. "-" .$day. " " .$hour. ":" .$minutes. ":" .$second. ".000"; 

Demo

0

Вы делаете это слишком сложно.Посмотрите на \DateTime classes и вы увидите, что это может быть столь же просто, как: -

$datetime = "150205172701"; 
$date = \DateTime::createFromFormat('ymdHis', $datetime); 
echo $date->format('Y-m-d H:i:s.u'); 

Выход: -

2015-02-05 17: 27: 01,000000

Demo

Смежные вопросы