Μετατροπή μιας μορφής ημερομηνίας σε μια άλλη σε PHP

Υπάρχει ένας απλός τρόπος να μετατρέψετε μια μορφή ημερομηνίας σε μια άλλη μορφή ημερομηνίας στην PHP;

Έχω αυτό:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Αλλά θα ήθελα φυσικά να επιστρέφει μια τρέχουσα ημερομηνία και όχι την αυγή. Τι κάνω λάθος;

Λύση

Η δεύτερη παράμετρος στην date() πρέπει να είναι μια σωστή χρονοσφραγίδα (δευτερόλεπτα από την 1η Ιανουαρίου 1970). Περνάτε ένα αλφαριθμητικό, το οποίο η date() δεν μπορεί να αναγνωρίσει.

Μπορείτε να χρησιμοποιήσετε την strtotime() για να μετατρέψετε μια συμβολοσειρά ημερομηνίας σε χρονοσφραγίδα. Ωστόσο, ακόμη και η strtotime() δεν αναγνωρίζει τη μορφή y-m-d-h-h-i-s.

PHP 5.3 και άνω

Χρησιμοποιήστε την DateTime::createFromFormat. Σας επιτρέπει να καθορίσετε μια ακριβή μάσκα - χρησιμοποιώντας τη σύνταξη date() - για να αναλύσετε τις εισερχόμενες ημερομηνίες συμβολοσειράς με.

PHP 5.2 και νεότερη έκδοση

Θα πρέπει να αναλύσετε τα στοιχεία (έτος, μήνας, ημέρα, ώρα, λεπτό, δευτερόλεπτο) χειροκίνητα χρησιμοποιώντας την substr() και να παραδώσετε τα αποτελέσματα στην mktime() που θα σας δημιουργήσει ένα timestamp.

Αλλά αυτό'είναι πολλή δουλειά! Συνιστώ να χρησιμοποιήσετε μια διαφορετική μορφή που να μπορεί να καταλάβει η strftime(). η strftime() καταλαβαίνει οποιαδήποτε εισαγωγή ημερομηνίας εκτός από την επόμενη φορά που ο Joe θα γλιστρήσει στον πάγο. για παράδειγμα, αυτό λειτουργεί:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   
Σχόλια (4)

Δοκιμάστε αυτό:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));
Σχόλια (3)

Πρέπει να μετατρέψετε την $old_date ξανά σε χρονοσήμανση, καθώς η συνάρτηση date απαιτεί χρονοσήμανση ως δεύτερο όρισμα.

Σχόλια (0)