SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

PHP 5.3 & MySQL 5.1

PHP 5.3 & MySQL 5.1 zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > PHP für Fortgeschrittene und Experten
Hilfe Community Kalender Heutige Beiträge Suchen

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 08.06.2004, 16:17:39
Weissenborn Weissenborn ist offline
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
Mit Zitat antworten
  #2  
Alt 08.06.2004, 17:37:35
Marilu Marilu ist offline
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?
Mit Zitat antworten
  #3  
Alt 08.06.2004, 23:29:03
tapferesschneid tapferesschneid ist offline
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)
Mit Zitat antworten
  #4  
Alt 09.06.2004, 09:43:15
Weissenborn Weissenborn ist offline
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
Mit Zitat antworten
  #5  
Alt 09.06.2004, 11:30:00
tapferesschneid tapferesschneid ist offline
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.
Mit Zitat antworten
  #6  
Alt 09.06.2004, 11:34:26
Weissenborn Weissenborn ist offline
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
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 12:57:21 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt