Datetime În timestamp Unix (Programare, Php, Timestamp)

bartek a intrebat.

Este cineva care se află pe o funcție PHP pentru a converti o dată de format 0000-00-00 00:00:00:00(datetimesql) în timestamp unix?

6 răspunsuri
John Conde

Pentru a face acest lucru în PHP 5.2 puteți face acest lucru:

$datetime = new DateTime();
echo $datetime->format('U');

O modalitate mai nouă de a face acest lucru începând cu PHP 5.3 este::

$datetime = new DateTime();
echo $datetime->getTimestamp();

wvanbergen

O altă opțiune, deoarece ați etichetat această întrebare cu SQL: funcțiile MySQL FROM_UNIXTIME și UNIX_TIMESTAMP -> Manualul MySQL

SELECT UNIX_TIMESTAMP(datetime_column) FROM table

De obicei, acest lucru este mai rapid decât un apel de funcție PHP.

Comentarii

  • Mi-am pus aceeași întrebare… 🙂 Încercați întotdeauna să scoateți datele din baza de date cât mai bine posibil, deoarece MySQL va fi întotdeauna mai rapid decât PHP. –  > Por wvanbergen.
  • Nu cred că chestia cu SQL era în întrebare când am dat downvoted la asta – poate că editarea a fost în timpul ferestrei de 5 minute în care nu apare în istoricul editărilor? Down-vote inversat. –  > Por Alnitak.
  • nu că utilizatorul a specificat MySQL, iar funcția UNIX_TIMESTAMP() nu este o funcție SQL standard… –  > Por Alnitak.
  • Alnitak are un punct de vedere valid, există o mulțime de presupuneri cu privire la faptul că este implicat un BD sau nu wvanbergen. Ce se întâmplă dacă preia timestamp-uri din nume de fișiere? –  > Por dcousineau.
  • Nu. Nu. Nu generați un apel la serverul SQL doar pentru a converti datele. Dacă aveți nevoie de acest lucru ca parte a unei interogări – ok, dar obținerea acestor informații triviale în afara procesului este BAD BAD BAD BAD. –  > Por elcuco.
ceejayoz

@bartek – După cum ați observat, PHP’s strtotime este perfectă pentru acest lucru. Aceasta poate gestiona cele mai comune formate de date, inclusiv șiruri de caractere precum „mâine” sau „+5 luni”.

Comentarii

  • Rețineți că, deoarece poate gestiona atât de multe formate, este foarte lent. Nu o utilizați dacă aveți de gând să o apelați des. –  > Por wvanbergen.
  • da, de fapt, manualul nu spune dacă acest format special de dată-timp este acceptat. De aceea am recomandat în schimb strptime(). –  > Por Alnitak.
  • De fapt, am înfășurat un site web în jurul funcției strtotime(), în caz că ajută pe cineva: www.unixstamp.com –  > Por soulkphp.
Alnitak

Utilizați strptime() pentru a analiza ora și a o transforma într-o matrice structurată.

Apoi treceți rezultatele acesteia în funcția mktime() pentru a obține un timestamp UNIX.

Comentarii

  • dunno – sunt 99% sigur că întrebarea nu menționa SQL când am postat acest răspuns -.  > Por Alnitak.
deepcell

Am o soluție pentru tine chiar aici:

/* From MySQL datetime to Unix Timestamp 2003-12-30 23:30:59 -> 1072834230 */
function convertMysqlDateTimeToUnixTimeStamp($date) {
    $yr=strval(substr($date,0,4));
    $mo=strval(substr($date,5,2));
    $da=strval(substr($date,8,2));
    $hr=strval(substr($date,11,2));
    $mi=strval(substr($date,14,2));
    $se=strval(substr($date,17,2));
    return mktime($hr,$mi,$se,$mo,$da,$yr);
}

johnboiles

Încapsularea soluției lui wvanbergen într-o funcție (pentru confortul tău)

//Convert SQL datetime to unixtime -- by johnboiles
function datetimeToUnixtime($datetime){
    $result = mysql_query("select unix_timestamp('$datetime')");
    $unixtime = mysql_fetch_array($result);
    return $unixtime[0];
}

Comentarii

  • acest lucru presupune să mergi de două ori în baza de date. soluția lui wvanbergen trebuia aplicată în cazul în care datele sunt preluate din db în primul rând. –  > Por Stefan Paul Noack.