Converti DateTime in String PHP


225

Ho già studiato molti siti su come posso convertire l'oggetto PHP DateTime in String. Vedo sempre "String to DateTime" e non "DateTime to String"

PHP DateTime può essere ripetuto, ma quello che voglio elaborare il mio DateTime con le funzioni di stringa PHP.

La mia domanda è come posso fare PHP dateTime Object su una stringa a partire da questo tipo di codice:

$dts = new DateTime(); //this returns the current date time
echo strlen($dts);

2
Perché vuoi elaborare DateTime con funzioni stringa? Cosa stai cercando di realizzare?
Mgiuffrida,

2
una specie di validatore del datetime? in php
Netorica,

Risposte:


413

Puoi usare il formatmetodo della DateTimeclasse:

$date = new DateTime('2000-01-01');
$result = $date->format('Y-m-d H:i:s');

Se formatfallisce per qualche motivo, tornerà FALSE. In alcune applicazioni, potrebbe avere senso gestire il caso in cui si verifica l'errore:

if ($result) {
  echo $result;
} else { // format failed
  echo "Unknown Time";
}

3
+1 Funziona. Puoi per favore anche dire come controllare per null (nella stessa riga) prima di fare questa conversione. Grazie!
Watt,

2
Ehi @Watt, buon punto! Ho ampliato l'esempio per mostrare come gestire il caso in errore.
rjz,

3
hai dimenticato il fuso orario, invece usa $date->format('c')o $date->format('Y-m-d H:i:s Z')oppure$date->format('Y-m-d H:i:s T')
Timo Huovinen il

1
quale istruzione di utilizzo hai bisogno per poter usare -> formato? Dice che manca qualcosa in Zend
Chimico il

1
Puoi usare questo modulo più breve $result = (new DateTime('2000-01-01'))->format('Y-m-d H:i:s');da PHP 5.4. Guarda qui: docs.php.net/manual/en/migration54.new-features.php È stato aggiunto l'accesso dei membri della classe
FFirmenich,

17

Il modo più semplice che ho trovato è:

$date   = new DateTime(); //this returns the current date time
$result = $date->format('Y-m-d-H-i-s');
echo $result . "<br>";
$krr    = explode('-', $result);
$result = implode("", $krr);
echo $result;

Spero possa essere d'aiuto.



15

Ci sono alcuni formati predefiniti date_d.phpda usare con formatlike:

define ('DATE_ATOM', "Y-m-d\TH:i:sP");
define ('DATE_COOKIE', "l, d-M-y H:i:s T");
define ('DATE_ISO8601', "Y-m-d\TH:i:sO");
define ('DATE_RFC822', "D, d M y H:i:s O");
define ('DATE_RFC850', "l, d-M-y H:i:s T");
define ('DATE_RFC1036', "D, d M y H:i:s O");
define ('DATE_RFC1123', "D, d M Y H:i:s O");
define ('DATE_RFC2822', "D, d M Y H:i:s O");
define ('DATE_RFC3339', "Y-m-d\TH:i:sP");
define ('DATE_RSS', "D, d M Y H:i:s O");
define ('DATE_W3C', "Y-m-d\TH:i:sP");

Usa così:

$date = new \DateTime();
$string = $date->format(DATE_RFC2822);

3
È possibile utilizzare la costante di DateTime (ad esempio DateTime :: ISO8601), facilita la lettura del codice.
Anh-Tuan Mai,

2

Modo più breve usando la lista. E puoi fare quello che vuoi con ogni componente della data.

list($day,$month,$year,$hour,$min,$sec) = explode("/",date('d/m/Y/h/i/s'));
echo $month.'/'.$day.'/'.$year.' '.$hour.':'.$min.':'.$sec;

2

Ha funzionato per me

$start_time   = date_create_from_format('Y-m-d H:i:s', $start_time);
$current_date = new DateTime();
$diff         = $start_time->diff($current_date);
$aa           = (string)$diff->format('%R%a');
echo gettype($aa);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.