2010-09-03 4 views

Odpowiedz

2

Ponieważ timestamp nie jest timestamp Unix, trzeba użyć substr()

$timestamp = "20100902040003"; 

$year = substr($timestamp, 0, 3); 
$month = substr($timestamp, 4, 5); 
$day = substr($timestamp, 6, 7); 
$hour = substr($timestamp, 8, 9); 
$minute = substr($timestamp, 10, 11); 
$second = substr($timestamp, 12, 13); 

Następnie zorganizować, że za pomocą sprintf()

$formatted_timestamp = sprintf('%s-%s-%s %s:%s:%s', $year, $month, $day, $hour, $minute, $second); 
+0

dzięki. czy umieściłbym tę funkcję w moim oświadczeniu foreach, ponieważ dynamicznie tworzę wiersz? dzięki. – cjd143SD

+0

Naprawiłem format, ponieważ G wydrukuje godzinę bez zera wiodącego, musisz użyć H zamiast tego. Możesz umieścić tę funkcję podczas tworzenia tablicy lub gdy ją wydrukujesz, obie wersje. – leonardys

10
$timestamp = "20100902040003"; 
echo date('Y-m-d H:i:s', strtotime($timestamp)); // output: 2010-09-02 04:00:03 
+0

@downvoter: Daje wynik jak wspomniano w pytaniu. Czy wyjaśnisz to szczegółowo? – NAVEED

+0

Zmieniono moje -1 na +1, ponieważ źle odczytałem. Przegapiłem wywołanie 'strtotime()'. – BoltClock

+0

@codaaddict ponieważ funkcja 'strtotime' konwertuje ją na znacznik czasu – Mischa

2

Jeśli masz pewność, że wszystkie rekordy twój plik wejściowy ma format YYYYMMDDHHmmss, możesz spróbować podzielić ciąg samodzielnie, a następnie użyć date() w połączeniu z mktime(), aby wygenerować sensowny format daty.

+0

dzięki. tak, wszystkie rekordy mają dokładnie taki sam format. czy możesz pokazać mi przykład? – cjd143SD

+1

strtotime() rozumie znaczniki czasu ISO 8601, takie jak "20100902040003" – nohat

+0

Myślę, że nie ma lepszego rozwiązania, ponieważ całkowicie pomija funkcje 'date' i' mktime'. – BoltClock

2

Ponieważ Twoje dane są już w odpowiednim formacie, wystarczy wpisać znaki interpunkcyjne, aby można było użyć wyrażenia regularnego, a nie funkcji formatowania daty i daty.

$timestamp = "20100902040003"; 
preg_replace('/(\d\d\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/', 
      '\1-\2-\3 \4:\5:\6', $timestamp) 

plony:

2010-09-02 04:00:03 
Powiązane problemy