2016-07-23 22 views
2

Hier mein PHP-Code istconvert Zeitstempel Zeichenfolge Zeitstempel integer php

var_dump($args['startdate']); 
var_dump((int)$args['startdate']);die(); 

Hier ausgegeben

string(13) "1468821556126" int(2147483647) 

Erwartete Ausgabe

string(13) "1468821556126" int(1468821556126) 

, warum dies geschieht und wie diese lösen Problem ?

+1

Was ist das Problem? Was bedeutet "lösen" * in diesem Zusammenhang? – BeetleJuice

+0

'int idate (string $ format [, int $ timestamp = time()])' lesen Sie mehr unter http://php.net/manual/en/function.idate.php – ihemant360

+0

@BeetleJuice Siehe bearbeiten ... –

Antwort

2

Sie können kein zuverlässiges Ergebnis erhalten, weil Ihre Zahl zu groß ist, als eine ganze Zahl dargestellt zu werden.

echo PHP_INT_MAX; //2147483647 on my system 

Für eine Reihe so groß ist wie bei Ihnen, wenn Sie es im numerischen Format benötigen, muss er in einem Schwimmer statt einer ganzen Zahl

echo floatval('1468821556126'); //1.46882155613E+12 

Von dort aus, wenn Sie versuchen, eine bekommen Datum nehme ich an, dass dies Javascript-Zeit ist, die in Millisekunden ist. Zur Umrechnung auf eine Unix-Zeitstempel, werden Sie dann müssen sie teilen durch 1000

+0

Es funktioniert .. danke für die Antwort ... :) –

1

Sie verwenden wahrscheinlich ein 32-Bit-System. Die Nummer, die Sie sehen, ist die maximale Größe eines Int auf einem 32-Bit-Rechner. Verwenden Sie Float oder wechseln Sie zu einer 64-Bit-Maschine.

Ref: PHP Integer

+0

Wie kann ich gewünschte Ausgabe bekommen ?? Ich weiß, was Sie schon sagen ... :) –

+0

Könnten Sie ein wenig mehr Kontext, warum Sie Integer brauchen? PHP ist sehr flexibel, wenn es um den Datentyp geht. Meistens müssen Sie sich keine Sorgen machen. – adarshdec23

+0

@PraveenKumar Sie können nicht genau 'int (1468821556126)' von einem 'var_dump' erhalten, weil PHP-Ganzzahlen nicht so hoch gehen. Stattdessen zu einem Float - wie ich es in meiner Lösung mache (oder wie hier vorgeschlagen) – BeetleJuice

1

Es geschieht, weil Ihr $args['startdate'] in miliseconds ist, müssen Sie es teilen, um 1000

+1

Wenn '$ args [' startdate ']' ist ein Zeitstempel dann ist das die einzig richtige Antwort. Echo (Datum ("Y-m-d H: i: s e", 1468821556126/1000)); "druckt" 2016-07-18 08:59:16 Europa/Bukarest ". – axiac

+0

@axiac Das ist wahrscheinlich das, wonach die OP sucht. – adarshdec23