CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
08.06.2004, 16:17:39
|
Anfänger
|
|
Registriert seit: Jun 2004
Beiträge: 3
|
|
Seltsame Datumskonvertierung
Hi Leute,
ich habe ein Problem mit einer etwas seltsamen Datumskonvertierung. Ich habe das mal in eine kleines Script gepackt:
<?
echo jdtogregorian(unixtojd(mktime(12, 0, 0, 02, 07 , 2004)));
echo "<br>";
echo jdtogregorian(unixtojd(mktime(12, 0, 0, 02, 08 , 2004)));
?>
Ausgabe:
2/7/2004
1/31/2004
Ich hätte natürlich erwartet, das da
2/7/2004
2/8/2004
raus kommt.
Weis einer von Euch woran das liegt, und wie ich das Problem umgehen kann?
Viele Grüße von
Gregor
|
08.06.2004, 17:37:35
|
Member
|
|
Registriert seit: Apr 2003
Ort: 49.54, 8.35 - 3./9
Beiträge: 878
|
|
Welches Format willst Du denn rausbekommen? Was machen die *jd*-Funtionen? Wo haste die her?
|
08.06.2004, 23:29:03
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
Die jd-Funktionen funktionieren eigentlich (außer, daß vor dem greg. 15.10.1582 eigentlich der 04.10.1582 kommen müßte, aber da gab es den Kalender ja noch nicht).
Der Fehler steckt hier schon in mktime().
Ab der 8 verursachen die führenden Nullen beim Tag absurde Fehler (vielleicht interpretiert PHP das dann oktal, binär oder einfach wie es will). 08 ist wie 0 (daher der 31.01.), 010 wie 2, 011 aber auch ...
Laß die führenden Nullen weg, dann geht's.
EDIT: PHP/4.3.4 unter Windows
Geändert von tapferesschneid (08.06.2004 um 23:33:38 Uhr)
|
09.06.2004, 09:43:15
|
Anfänger
|
|
Registriert seit: Jun 2004
Beiträge: 3
|
|
Ja, ist in der Tat so. Die 0 verursacht das Problem. Übrigens nicht nur bei dem Datum.
Wenn man den folgenden Code benutzt sieht man es auch:
echo 07;
echo "<br>";
echo 08;
Ausgabe:
7
0
Nicht, wie man vielleicht erwarten würde,
7
8
Also ich persönlich stufe das eher als Bug ein, weil dieses Verhalten auch nicht kontinuierlich ist, und durch unterschiedliche Daten bedingt wird, was ein Programmierer kaum vorhersehen wird, wenn er es nicht weis.
Man kann das Problem natürlich durch das weglassen der führenden 0 lösen, oder aber auch so:
echo (int)"07";
echo "<br>";
echo (int)"08";
Ausgabe:
7
8
Ich finde das Ganze ziemlich krass.
Viele Grüße von
Gregor
|
09.06.2004, 11:30:00
|
Junior Member
|
|
Registriert seit: Jun 2003
Beiträge: 194
|
|
Wie die folgende Tabelle eindrucksvoll zeigt, interpretiert PHP Zahlen mit führender Null 100%ig oktal:
PHP-Code:
<?php
echo '<table border=1>';
for ($i = 0; $i <= 200; $i++)
$code .= 'echo "<tr><td>0'.$i.'</td><td>"; echo 0'.$i.'; echo "</td></tr>";';
eval($code);
echo '</table>';
?>
Bis zur 07 stimmt alles, die 08 und 09 gibt es nicht, also kommt 0 raus. 010 sind dann 8 (nicht 2), 011 sind 9 ... 017 sind 15. Bei 018 gibt es wieder den Fehler, daß es 8 nicht gibt, also nimmt er nur die 1 und das sind 1, genau wie bei 019, 020 sind dann logischerweise 16 usw.
Und das ist -- wie ich gerade im PHP Handbuch, Kapitel 6: »Typen« sehe -- kein Bug, sondern Absicht:
Zitat:
Syntax
Ganzzahlen können in dezimaler (10-basierter), hexadezimaler (16-basierter) oder oktaler (8-basierter) Schreibweise angegeben werden, wahlweise mit einem vorangestellten Zeichen (- oder +).
Wenn Sie die oktale Schreibweise verwenden, müssen Sie die Zahl mit einer vorangestellten Null 0 schreiben; in hexadezimaler Schreibweise müssen Sie vor die Zahl ein 0x schreiben.
|
|
09.06.2004, 11:34:26
|
Anfänger
|
|
Registriert seit: Jun 2004
Beiträge: 3
|
|
Mann das ist ja ein Ding. Also die hätten vieleicht mal über ein 0o (in Anlehnung an das 0x) nachdenken sollen anstatt einfach die 0 zu nehmen. :-)
Viele Grüße von
Gregor
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 12:57:21 Uhr.
|