Αν έχω ένα αλφαριθμητικό PHP με τη μορφή mm-dd-YYYY
(για παράδειγμα, 10-16-2003), πώς μπορώ να το μετατρέψω σωστά σε Date
και στη συνέχεια σε DateTime
με τη μορφή YYYY-mm-dd
; Ο μόνος λόγος που ρωτάω για την Ημερομηνία
και την Ημερομηνία-Χρόνο
είναι επειδή χρειάζομαι το ένα σε ένα σημείο και το άλλο σε ένα άλλο σημείο.
Χρησιμοποιήστε την strtotime()
για την πρώτη ημερομηνία και στη συνέχεια την date('Y-m-d')
για να την μετατρέψετε πίσω:
$time = strtotime('10/16/2003');
$newformat = date('Y-m-d',$time);
echo $newformat;
// 2003-10-16
Σημειώστε ότι υπάρχει διαφορά μεταξύ της χρήσης της κάθετης φοράς /
και της παύλας -
στη συνάρτηση strtotime()
. Για να παραθέσω ένα απόσπασμα από το php.net:
Ημερομηνίες σε μορφή m/d/y ή d-m-y διαχωρίζονται με την εξέταση της συνάρτησης διαχωριστικό μεταξύ των διαφόρων στοιχείων: εάν ο διαχωριστής είναι ένα κάθετος (/), τότε η αμερικανική m/d/y είναι ενώ αν ο διαχωριστής είναι ένα παύλα (-) ή μια τελεία (.), τότε το θεωρείται η ευρωπαϊκή μορφή d-m-y.
Πρέπει να είστε προσεκτικοί με τις μορφές m/d/Y και m-d-Y. Η PHP θεωρεί ότι το /
σημαίνει m/d/Y και το -
σημαίνει d-m-Y. Θα περιέγραφα ρητά τη μορφή εισόδου σε αυτή την περίπτωση:
$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');
Με αυτόν τον τρόπο δεν είστε έρμαιο των διαθέσεων μιας συγκεκριμένης ερμηνείας.
$d = new DateTime('10-16-2003');
$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16
Επεξεργασία: μπορείτε επίσης να περάσετε μια DateTimeZone στον κατασκευαστή DateTime() για να εξασφαλίσετε τη δημιουργία της ημερομηνίας για την επιθυμητή ζώνη ώρας, όχι την προεπιλεγμένη του διακομιστή.