PHP-MYSQL: het Omzetten van Unix Timestamp te DateTime en vice versa

im met behulp van php 5.4.6 en MySQL 5.5.29 en krijg ik last door het omzetten van een UNIX TIMESTAMP van het MYSQL-DATETIME-en vice versa. Mysql en php wun op de lokale machine.

Ik heb een eenvoudige mysql tabel

CREATE TABLE Entry(
id SERIAL PRIMARY KEY,
created DATETIME NOT NULL);

Voor het invoegen van gegevens gebruik ik php PDO en mysql NU(). Dit werkt prima, de juiste datum en tijd opgeslagen in de database.

Mijn plan is om te werken met unix timestamps aan de kant van de client (php & mysql, server side).

Dus ik zou graag willen leveren van unix timestamps aan mijn klant.
Daarom gebruik ik MySql UNIX_TIMESTAMP() functie om te zetten het direct in de query.

Dus een voorbeeld van een query er als volgt uitziet:

SELECT created, UNIX_TIMESTAMP(created) AS TS FROM Entry

Het resultaat:
gemaakt = 2013-02-14 20:47:35
TS = 1360871255

Dus nu wil ik de andere kant op, passeer ik het een UNIX Timestamp en wilt vergelijken met de Vermeldingen in mijn Database. Unfortunetly Im niet in staat tot het schrijven van een PHP script dat werkt. Ik weet niet waarom, maar toen ik m passeren van de dezelfde timestamp (1360871255) te PHP krijg ik niet 2013-02-14 20:47:35 met deze methode:

public static function toDateTime($unixTimestamp){
    return date("Y-m-d H:m:s", $unixTimestamp);
}

Als ik bel toDateTime(1360871255) terug 2013-02-14 20:02:35 dat is niet de originele DateTime.

Ik weet het, ik hoef te formatteren 1360871255 tot aan een Y-m-d H:m:s om het te gebruiken in MYSQL, maar 1360871255 lijkt niet de tijd die ik had verwacht (en MYSQL UNIX_TIMESTAMP is teruggekeerd).

Wat ik wil doen is een eenvoudige query, die mij laat zien Vermeldingen die ouder zijn dan een bepaalde timestamp, eenvoudig iets zoals dit:

SELECT * FROM Entry WHERE created < 1360871255

maar zoals ik al eerder heb gezegd, het resultaat van de query wordt niet verwacht, omdat 1360871255 lijkt niet de juiste tijd.

Ik het niet opgeven van een speciale tijdzone voor de mysql connectie in php.

Suggesties?

InformationsquelleAutor sockeqwe | 2013-02-14

 

5 Replies
  1. 42

    Uw datum formaat is verkeerd… i is voor minuut, niet m (maanden).

    return date("Y-m-d H:i:s", $unixTimestamp);

    Een paar side opmerkingen:

    • Er is geen noodzaak om opnieuw toe te wijzen, d.w.z. $unixTimestamp = $unixTimestamp;
    • Omdat je met behulp van PHP > 5.3. u bent wellicht geïnteresseerd in de nieuwe Datum /tijd object.
    • Damn, uw recht … omg … ik ben zo dom
    • U bent niet dom. U alleen over-keek. Het gebeurt.
  2. 3

    Het probleem ligt in de functie je schreef:

    return date("Y-m-d H:m:s", $unixTimestamp);

    U opgeeft, maand(m) in zowel de datum en tijd delen. Je moet vervangen door de tweede m met ik, de juiste vlag voor de uren bij het gebruik van date() in PHP.

    return date("Y-m-d H:i:s", $unixTimestamp);

    Afhankelijk van uw behoeften, misschien vind je de PHP functie strtotime() nuttig genoeg.

  3. 0
    function format_date($str) {
        $month = array(" ", "Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sep", "Oct", "Nov", "Dec");
        $y = explode(' ', $str);
        $x = explode('-', $y[0]);
        $date = "";    
        $m = (int)$x[1];
        $m = $month[$m];
        $st = array(1, 21, 31);
        $nd = array(2, 22);
        $rd = array(3, 23);
        if(in_array( $x[2], $st)) {
                $date = $x[2].'st';
        }
        else if(in_array( $x[2], $nd)) {
                $date .= $x[2].'nd';
        }
        else if(in_array( $x[2], $rd)) {
                $date .= $x[2].'rd';
        }
        else {
                $date .= $x[2].'th';
        }
        $date .= ' ' . $m . ', ' . $x[0];
    
        return $date;
    }
  4. 0

    niets van beide. u moet redden van de timestamp als een INT of BIGINT want als je de TIMESTAMP formaat van mysql-u zal nooit en nooit weer terug naar een int. Je kunt alleen maar iets als dit 1970-01-01 01:00:00.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *