Ich verwende es in meiner Funktion, die ein zufälliges Datum zwischen Start- und Enddatum zurückgibt:
public static function randomDate($start_date, $end_date, $format = DateTimeHelper::DATE_FORMAT_SQL_DATE)
{
if($start_date instanceof DateTime) $start_date = $start_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);
if($end_date instanceof DateTime) $end_date = $end_date->format(DateTimeHelper::DATE_FORMAT_YMDHMS);
// Convert timetamps to millis
$min = strtotime($start_date);
$max = strtotime($end_date);
// Generate random number using above bounds
$val = rand($min, $max);
// Convert back to desired date format
return date($format, $val);
}
Irgendeine Idee, wie man es dazu bringt, die richtige Unix-Zeit für ein zukünftiges Datum zurückzugeben?
Danke!
Wir glauben Ihnen, außer es ist das erwartete Verhalten für die von Ihnen übergebenen Datumswerte, die außerhalb des 32-Bit-PHP-Datumsbereichs liegen
– Markus Bäcker
16. Juli 10 um 14:52 Uhr
Aus der PHP-Dokumentation: Der gültige Bereich eines Zeitstempels reicht normalerweise von Fr, 13. Dezember 1901, 20:45:54 UTC bis Di, 19. Januar 2038, 03:14:07 UTC. (Dies sind die Daten, die den Mindest- und Höchstwerten für eine 32-Bit-Ganzzahl mit Vorzeichen entsprechen.) Außerdem unterstützen nicht alle Plattformen negative Zeitstempel, daher ist Ihr Datumsbereich möglicherweise auf nicht früher als die Unix-Epoche beschränkt. Das bedeutet, dass z. B. Daten vor dem 1. Januar 1970 unter Windows, einigen Linux-Distributionen und einigen anderen Betriebssystemen nicht funktionieren. PHP 5.1.0 und neuere Versionen überwinden diese Einschränkung jedoch.
– Ivar Bonsaksen
16. Juli 10 um 14:53 Uhr
Ich verwende PHP 5.3 =S 5.2 auf meinem Live-Server. sollte es dann nicht funktionieren?
– Garrett
16. Juli 10 um 15:19 Uhr
Nein, PHP 5.1.0+ behebt das „Außerdem unterstützen nicht alle Plattformen negative Zeitstempel“-Bit, nicht das „bis Di, 19. Januar 2038“-Bit.
– Leichtigkeitsrennen im Orbit
16. März 11 um 11:26 Uhr
Wenn Sie mit Daten arbeiten möchten, die außerhalb des 32-Bit-Integer-Datumsbereichs liegen, verwenden Sie die dateTime-Objekte von PHP
Eigentlich scheint es, als würde es meine randomDate-Funktion töten. Wie kann ich ein zufälliges Datum mit einer DateTime machen?
– Garrett
16. Juli 10 um 15:23 Uhr
Wie wird diese Antwort akzeptiert, wenn die Frage war, wie man einen Unix-Zeitstempel erhält?
– mvds
16. Juli 10 um 15:25 Uhr
dateTime-Objekte uk2.php.net/manual/en/book.datetime.php sind seit PHP v5.2.0 verfügbar und verwenden intern eine 64-Bit-Ganzzahl, die einen Datumsbereich von etwa 292 Milliarden Jahren bis etwa 292 Milliarden Jahren in der Zukunft angibt. Dies sollte für die meisten Anwendungen ausreichend sein, es sei denn, Sie sind Paläobiologe.
bearbeiten: Gerade getestet: Es wurde durch die Installation eines 64-Bit-Betriebssystems und einer geeigneten 64-Bit-Version von PHP behoben. Ich schätze, wir haben genug Zeit, um einen wiedergeborenen Jahrtausendfehler zu beheben:
Betreff: Bearbeiten – Beachten Sie, dass 64-Bit-PHP (VC9-Thread-sicher) unter Vista 64-Bit immer noch einen 32-Bit-Zeitstempelbereich für vorzeichenbehaftete Ganzzahlen für Datumswerte verwendet
– Markus Bäcker
16. Juli 10 um 15:45 Uhr
Ich vermute, dass dies daran liegt strtotime() ist keine PHP-Funktion, sondern nur ein Stück Rohrleitung, um sich mit (g)libc zu verbinden (zumindest im Unix-Land)
– mvds
16. Juli 10 um 15:54 Uhr
Möglicherweise war ich ziemlich verärgert, als ich es entdeckte, als ich kürzlich einige Date-Tests auf verschiedenen Plattformen durchführte. Es ist auch interessant festzustellen, dass die Datumszeichenfolgenformate, die an den dateTime-Konstruktor übergeben werden, eine Reihe von Formaten akzeptieren, die strtotime ablehnen wird; aber ich habe nicht auf die Interna geschaut, um zu sehen, was die beiden verwenden
Der gültige Bereich eines Zeitstempels reicht normalerweise von Freitag, 13. Dezember 1901, 20:45:54 Uhr GMT bis Dienstag, 19. Januar 2038, 03:14:07 Uhr GMT. (Dies sind die Daten, die den Mindest- und Höchstwerten für eine 32-Bit-Ganzzahl mit Vorzeichen entsprechen). Vor PHP 5.1.0 war dieser Bereich jedoch auf einigen Systemen (z. B. Windows) vom 01.01.1970 bis zum 19.01.2038 begrenzt.
Sie können keine Daten konvertieren, die nach dem Unix-Zeitrollover (2038) auftreten.
Einfacher Austausch von strtotime
$date="2199-12-31T08:00:00.000-06:00";
echo date('Y-m-d', strtotime($date)); // fails with 1970 result
echo date_format( date_create($date) , 'Y-m-d'); // works perfect with 5.2+
Wir glauben Ihnen, außer es ist das erwartete Verhalten für die von Ihnen übergebenen Datumswerte, die außerhalb des 32-Bit-PHP-Datumsbereichs liegen
– Markus Bäcker
16. Juli 10 um 14:52 Uhr
Aus der PHP-Dokumentation: Der gültige Bereich eines Zeitstempels reicht normalerweise von Fr, 13. Dezember 1901, 20:45:54 UTC bis Di, 19. Januar 2038, 03:14:07 UTC. (Dies sind die Daten, die den Mindest- und Höchstwerten für eine 32-Bit-Ganzzahl mit Vorzeichen entsprechen.) Außerdem unterstützen nicht alle Plattformen negative Zeitstempel, daher ist Ihr Datumsbereich möglicherweise auf nicht früher als die Unix-Epoche beschränkt. Das bedeutet, dass z. B. Daten vor dem 1. Januar 1970 unter Windows, einigen Linux-Distributionen und einigen anderen Betriebssystemen nicht funktionieren. PHP 5.1.0 und neuere Versionen überwinden diese Einschränkung jedoch.
– Ivar Bonsaksen
16. Juli 10 um 14:53 Uhr
Ich verwende PHP 5.3 =S 5.2 auf meinem Live-Server. sollte es dann nicht funktionieren?
– Garrett
16. Juli 10 um 15:19 Uhr
Nein, PHP 5.1.0+ behebt das „Außerdem unterstützen nicht alle Plattformen negative Zeitstempel“-Bit, nicht das „bis Di, 19. Januar 2038“-Bit.
– Leichtigkeitsrennen im Orbit
16. März 11 um 11:26 Uhr