strftime() geht nicht richtig.

strftime() geht nicht richtig.

am 18.11.2004 13:08:19 von Marco von Frieling

Hallo.

Ich möchte die Kalenderwoche des aktuellen Datums ermitteln und verwende
dazu strftime() wie folgt:

$kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen muss.

echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
System geht es aber, d. h. heute würde "KW = 45." ausgegeben.

Hier nun die Konfigurationen beider Systeme:

- mein PC (geht nicht)
- Windows XP SP2
- IIS 5.1
- PHP 4.3.6
- Server (geht)
- Linux stripples.devel.redhat.com 2.4.21-1.1931.2.274.entsmp #1 SMP
Tue Jun 24 11:18:10 EDT 2003 i686 i686 i386 GNU/Linux
- Apache 2.0
- PHP 4.2.2

Kann das an den Versionen bzw. IIS vs. Apache liegen? Oder habt ihr noch
eine andere Idee?

Bin für jede Hilfe dankbar.

Gruß
Marco

Re: strftime() geht nicht richtig.

am 18.11.2004 15:43:20 von Thomas Scholl

Hallo Marco,

versuch es doch mal mit date("W");

$kw= date("W");

die Konvertierung in ein Zahlenformat beim Rechnen sollte PHP von alleine
tun.

Gruß Thomas

"Marco von Frieling" schrieb im Newsbeitrag
news:303hlkF2rvtnmU1@uni-berlin.de...
> Hallo.
>
> Ich möchte die Kalenderwoche des aktuellen Datums ermitteln und verwende
> dazu strftime() wie folgt:
>
> $kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen muss.
>
> echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen System
> geht es aber, d. h. heute würde "KW = 45." ausgegeben.
>
> Hier nun die Konfigurationen beider Systeme:
>
> - mein PC (geht nicht)
> - Windows XP SP2
> - IIS 5.1
> - PHP 4.3.6
> - Server (geht)
> - Linux stripples.devel.redhat.com 2.4.21-1.1931.2.274.entsmp #1 SMP Tue
> Jun 24 11:18:10 EDT 2003 i686 i686 i386 GNU/Linux
> - Apache 2.0
> - PHP 4.2.2
>
> Kann das an den Versionen bzw. IIS vs. Apache liegen? Oder habt ihr noch
> eine andere Idee?
>
> Bin für jede Hilfe dankbar.
>
> Gruß
> Marco

Re: strftime() geht nicht richtig.

am 18.11.2004 16:01:38 von jpm-account-forwards-to-dev-null-use-reply-adress

Marco von Frieling schrieb:

> $kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen muss.
>
> echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
> System geht es aber, d. h. heute würde "KW = 45." ausgegeben.
[..]
> Kann das an den Versionen bzw. IIS vs. Apache liegen? Oder habt ihr noch
> eine andere Idee?

Die Idee in's Manual zu schauen hattest Du nicht selber?

Auf http://de.php.net/strftime steht dazu, sogar explizit zu %V, eine
ganze Menge.

Übrigens: In der englischen Version steht oft noch mehr. Also auch
nochmal bei http://de.php.net/en/strftime vorbeischauen.


Gruß, JPM

--
SPAMSCHUTZ: Meine E-Mail Adresse ist verschlüsselt.
Wenn Du mir per Mail antworten möchtest, führe bitte
zweimal ROT-13 auf meiner E-Mail Adresse aus.

Re: strftime() geht nicht richtig.

am 18.11.2004 16:04:04 von Daniel Jaenecke

Marco von Frieling wrote:

> Ich möchte die Kalenderwoche des aktuellen Datums ermitteln und verwende
> dazu strftime() wie folgt:
>
> $kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen muss.
>
> echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
> System geht es aber, d. h. heute würde "KW = 45." ausgegeben.


| string strftime ( string format [, int timestamp])


|array getdate ( [int timestamp])

strftime() erwartet als zweiten Parameter einen Timestamp/Integer; getdate()
liefert allerdings ein Array zurück. Benutze entweder mktime() bzw.
verzichte auf den zweiten Parameter.

Daß bzw. warum es auf dem anderen System funktioniert ist - solltest Du dort
den gleichen Code verwenden - für mich nicht einsichtig.




Gruß
-dj-




--
Rules are there to make you think before you break them.
[T. Pratchett]

Re: strftime() geht nicht richtig.

am 18.11.2004 19:11:05 von Willi Marquart

Marco von Frieling wrote:

>echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
>System geht es aber, d. h. heute würde "KW = 45." ausgegeben.

Wenn da wirklich 45 ausgegeben wird, gehts da auch nicht, denn wir
haben die 47. KW.

Gruß Willi

Re: strftime() geht nicht richtig.

am 18.11.2004 19:34:16 von Frank Schenk

Willi Marquart wrote:

> Marco von Frieling wrote:
>
>
>>echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
>>System geht es aber, d. h. heute würde "KW = 45." ausgegeben.
>
>
> Wenn da wirklich 45 ausgegeben wird, gehts da auch nicht, denn wir
> haben die 47. KW.
>
> Gruß Willi

Von welchem Kalender redet ihr? Dem Chinesischen?

Es ist die 46. Woche, zumindestens in Deutschland.

Zum Selbertesten:

setlocale(LC_TIME,'de_DE');
echo strftime("%W");

?>

Zum Datumauswählen:

$day = (!$day) ? date("d") : $day;
$month = (!$month) ? date("m") : $month;
$year = (!$year) ? date("Y") : $year;
setlocale(LC_TIME,'de_DE');
echo strftime("%W",mktime(0,0,0,$month,$day,$year);

?>

Etwaige Parseerrors darf der geneigte Leser selbst korrigieren.


Gruss, Frank

Re: strftime() geht nicht richtig.

am 18.11.2004 19:40:52 von Andrea Glatthor

Frank Schenk schrieb:

> Es ist die 46. Woche, zumindestens in Deutschland.

Hmm, bei mir ist es die 47. Woche und ich lebe in Deutschland. :-)

Andrea

Re: strftime() geht nicht richtig.

am 18.11.2004 19:45:23 von Frank Schenk

Marco von Frieling wrote:

> Hallo.
>
> Ich möchte die Kalenderwoche des aktuellen Datums ermitteln und verwende
> dazu strftime() wie folgt:
>
> $kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen muss.

$kw
- nix zu meckern

(int)
- was glaubst du, ist die Woche? Ein String? Typecasting macht PHP
normalerweise automatisch

strftime("%V", getdate());
- oh je

- locale überprüft? Bitte Manual unter setlocale() anschauen
- getdate() - bitte ins Handbuch schauen, was getdate() liefert
- strftime() - bitte ins Handbuch schauen, welches Format strftime für
das Datum/die Zeit erwartet und was passiert, wenn man keines übergibt.



// int, weil ich damit rechnen muss
- du musst damit rechnen? Dann ist es doch egal, ob ein String oder ein
Integerwert ausgegeben wird. Vielleicht liest du dir mal das Handbuch
durch zu Variablen.

> echo "KW = $kw."; führt zu der Ausgabe "KW = .", auf einem anderen
> System geht es aber, d. h. heute würde "KW = 45." ausgegeben.

1. 45 ist nicht die richte KW
2. Wie kann das auf einer anderen Kiste laufen? Dein Code ist falsch,
error_reporting(E_ALL) hilft dir auch weiter.

> Kann das an den Versionen bzw. IIS vs. Apache liegen? Oder habt ihr noch
> eine andere Idee?

Nein, das liegt am fehlerhaften Script.

> Bin für jede Hilfe dankbar.

http://www.php.net/manual/en
- setlocale anschauen
- strftime anschauen
- getdate() anschauen

> Gruß
> Marco

Gruss, Frank

P.S.: Die Antwort hättest du mit 5 Minuten Recherche im Handbuch selbst
herausfinden können.

Re: strftime() geht nicht richtig.

am 18.11.2004 19:48:10 von Frank Schenk

Andrea Glatthor wrote:

> Frank Schenk schrieb:
>
>
>>Es ist die 46. Woche, zumindestens in Deutschland.
>
>
> Hmm, bei mir ist es die 47. Woche und ich lebe in Deutschland. :-)
>
> Andrea

Hab doch meine Message schon gecancelt, habs bemerkt direkt, nachdem
ichs abgeschickt habe, nun heule ich mich heute Nacht in mein Kissen und
niemand tröstet mich :(


Gruss, Frank ;)

....der sich man cal ausdruckt und unters kopfkissen legt...

Re: strftime() geht nicht richtig.

am 18.11.2004 20:00:12 von Johannes Vogel

Hi Frank

Frank Schenk wrote:
> Marco von Frieling wrote:
>> Ich möchte die Kalenderwoche des aktuellen Datums ermitteln und
>> verwende dazu strftime() wie folgt:
>> $kw = (int)strftime("%V", getdate()); // int, weil ich damit rechnen
>> muss.
> (int)
> - was glaubst du, ist die Woche? Ein String? Typecasting macht PHP
> normalerweise automatisch

> // int, weil ich damit rechnen muss
> - du musst damit rechnen? Dann ist es doch egal, ob ein String oder ein
> Integerwert ausgegeben wird. Vielleicht liest du dir mal das Handbuch
> durch zu Variablen.

Da macht sich endlich mal jemand professionell Gedanken um Datentypen.
Da gibt's sicher nichts zu bemängeln.

> P.S.: Die Antwort hättest du mit 5 Minuten Recherche im Handbuch selbst
> herausfinden können.

Tatsächlich! Und schon ist's Schluss mit Professionalität. :-(

Johannes

Re: strftime() geht nicht richtig.

am 18.11.2004 20:07:33 von Frank Schenk

Johannes Vogel wrote:
....
> Da macht sich endlich mal jemand professionell Gedanken um Datentypen.
> Da gibt's sicher nichts zu bemängeln.
>

Stimme ich dir zu - wenn wir nicht von PHP reden würden ;)

In PHP sind die einzigen Gedanken, die man sich um Datentypen macht,
die, wie man einen Integerwert, der als String gecastet wird, wieder zu
einem Integer macht - oder man benutzt das manuelle Typecasten, weil mal
wieder irgendeine Ceil/Floor/Round-Funktion nicht ganz so arbeitet, wie
man sich das wünscht, für was anderes habe ich intval() etc. in PHP noch
nie gebraucht.

Wer auf die Finger will, wenn er falsche Datentypen verwendet, der soll
C, Python, Perl oder Java verwenden. ;)

Gruss, Frank

Re: strftime() geht nicht richtig.

am 18.11.2004 22:56:30 von Johannes Vogel

Hi Frank

Frank Schenk wrote:
> Johannes Vogel wrote:
>> Da macht sich endlich mal jemand professionell Gedanken um Datentypen.
>> Da gibt's sicher nichts zu bemängeln.
> Stimme ich dir zu - wenn wir nicht von PHP reden würden ;)
> In PHP sind die einzigen Gedanken, die man sich um Datentypen macht,
> die, wie man einen Integerwert, der als String gecastet wird, wieder zu
> einem Integer macht - oder man benutzt das manuelle Typecasten, weil mal
> wieder irgendeine Ceil/Floor/Round-Funktion nicht ganz so arbeitet, wie
> man sich das wünscht, für was anderes habe ich intval() etc. in PHP noch
> nie gebraucht.

Und plötzlich wollen die Leute Arrays als Zahlenwerte in andere
Funktionen übernehmen. Schliesslich tönt doch sowas wie:
Ich werfe das Ergebnis von getdate() in mein strftime() und mach daraus
ein Integer gar nicht mal so übel. Es erstaunt mich jedoch, dass Marco
überhaupt daran dachte, am Schluss daraus einen Integer zu machen...

> Wer auf die Finger will, wenn er falsche Datentypen verwendet, der soll
> C, Python, Perl oder Java verwenden. ;)

Wer auf die Finger will, kümmert sich nicht darum und erschrickt
irgendwann, wenn er nicht mehr weiss, was in seinen Variablen *wirklich*
gespeichert ist.

Meinjanur, Johannes

Re: strftime() geht nicht richtig.

am 19.11.2004 08:21:49 von Rainer Huebenthal

Moin Johannes Vogel, du schriebst:

> Wer auf die Finger will, kümmert sich nicht darum und erschrickt
> irgendwann, wenn er nicht mehr weiss, was in seinen Variablen *wirklich*
> gespeichert ist.

Ihr seid Weicheier und Jammerlappen. Programmiert ABAP, *das*
ist eine Herausforderung :)

cu
Rainer

--
http://www.reisetraeume.com

Re: strftime() geht nicht richtig.

am 19.11.2004 08:30:29 von Marco von Frieling

Hallo Leute,

natürlich ist es die 47. Ich habe da was durcheinandergebracht. Ich
brauchte nämlich einerseits die aktuelle KW und zum anderen die KW des
1. vom aktuellen Monat (oder ggf. des 1. 1.). Und der 1. 11. liegt in
der 45.

Frank Schenk schrieb:
> Andrea Glatthor wrote:
>
>> Frank Schenk schrieb:
>>
>>
>>> Es ist die 46. Woche, zumindestens in Deutschland.
>>
>>
>>
>> Hmm, bei mir ist es die 47. Woche und ich lebe in Deutschland. :-)
>>
>> Andrea
>
>
> Hab doch meine Message schon gecancelt, habs bemerkt direkt, nachdem
> ichs abgeschickt habe, nun heule ich mich heute Nacht in mein Kissen und
> niemand tröstet mich :(
>
>
> Gruss, Frank ;)
>
> ...der sich man cal ausdruckt und unters kopfkissen legt...

Re: strftime() geht nicht richtig.

am 19.11.2004 08:37:59 von Marco von Frieling

Hallo Thomas,
> Hallo Marco,
>
> versuch es doch mal mit date("W");
>
> $kw= date("W");
Es gibt aber einen wesentlichen Unterschied zwischen V und W (bei
strftime, und W bei strftime und W bei date sind hoffentlich identisch):
Bei W beginnt die 1. Woche immer mit dem 1. 1., bei V hat die 1. Woche
mind. 4 Tage. Und ich brauche letzteres.
>
> die Konvertierung in ein Zahlenformat beim Rechnen sollte PHP von alleine
> tun.
Ich bin mir da nie so ganz sicher, weshalb ich auch typsichere Sprachen
bevorzuge. Kann ich hier nur leider nicht verwenden.


Gruß Marco

PS an alle: Konnte gestern nach 15:30 nicht mehr online gehen und da
waren noch keine Beiträge vorhanden. Trotzdem danke für die vielen
Antworten.

Re: strftime() geht nicht richtig.

am 19.11.2004 08:46:27 von Marco von Frieling

Hallo Jens,
> Die Idee in's Manual zu schauen hattest Du nicht selber?
>
> Auf http://de.php.net/strftime steht dazu, sogar explizit zu %V, eine
> ganze Menge.
>
> Übrigens: In der englischen Version steht oft noch mehr. Also auch
> nochmal bei http://de.php.net/en/strftime vorbeischauen.

natürlich habe ich dareingeschaut. Allerdings haben wir solche Manuals
lokal auf unserem Server um den Traffic zu reduzieren und ich benutze
meistens die CHM-Version statt der HTML-Version, weil man da besser
suchen kann. Möglicherweise haben wir im Netz nicht die aktuellste
Version. Werde ich vorsorglich austauschen.

Und in der CHM fehlt der Link zur MSDN-Seite, die darüber Aufschluss
gegeben hätte, dass "V" zu den "there might be more" gehört.

Trotzdem danke.

Marco

Re: strftime() geht nicht richtig.

am 19.11.2004 08:48:16 von Marco von Frieling

Hallo Daniel,
>
> | string strftime ( string format [, int timestamp])
>
>
> |array getdate ( [int timestamp])
>
> strftime() erwartet als zweiten Parameter einen Timestamp/Integer; getdate()
> liefert allerdings ein Array zurück. Benutze entweder mktime() bzw.
> verzichte auf den zweiten Parameter.
mktime hatte ich vorher probiert.
>
> Daß bzw. warum es auf dem anderen System funktioniert ist - solltest Du dort
> den gleichen Code verwenden - für mich nicht einsichtig.
Für mich mittlerweile schon. Schau dir doch mal das Posting von Jens
Peter Möller an.

Gruß
Marco

Re: strftime() geht nicht richtig.

am 19.11.2004 09:03:25 von Marco von Frieling

Hallo,
> Johannes Vogel wrote:
> ...
>
>> Da macht sich endlich mal jemand professionell Gedanken um Datentypen.
>> Da gibt's sicher nichts zu bemängeln.
>>
>
> Stimme ich dir zu - wenn wir nicht von PHP reden würden ;)
>
> In PHP sind die einzigen Gedanken, die man sich um Datentypen macht,
> die, wie man einen Integerwert, der als String gecastet wird, wieder zu
> einem Integer macht - oder man benutzt das manuelle Typecasten, weil mal
> wieder irgendeine Ceil/Floor/Round-Funktion nicht ganz so arbeitet, wie
> man sich das wünscht, für was anderes habe ich intval() etc. in PHP noch
> nie gebraucht.
Komme halt aus der Ecke VO und .NET und habe noch nicht so viel mit PHP
gemacht. Da ist alles mehr (.NET) oder etwas weniger (VO) streng
typisiert, obwohl es in VO auch ein paar Spezialitäten gibt. Da entzieht
es sich mir einfach jeder Logik, dass man mit Strings rechnen kann.
Schließlich kann in einem String ja auch mal was anderes stehen als eine
Zahl.

Bei getdate() hätte ich wirklich genauer ins Handbuch schauen müssen.
Aber zu den anderen Sachen habe ich gerade auf ein anderes Posting
geantwortet, dass ich die falsche, evtl. auch veraltete Version des
Handbuchs benutzt habe.

>
> Wer auf die Finger will, wenn er falsche Datentypen verwendet, der soll
> C, Python, Perl oder Java verwenden. ;)
Ich habe mir einmal ein Perl-Skript angeschaut, das hat gereicht. Die
Sprache ist aus meiner Sicht das reinste Mysterium. Nie wieder. Und was
anderes als PHP und Perl läuft auf dem Zielserver nicht und wird es auch
nicht.

Ich betrachte diesen Thread hiermit als geschlossen. Jedenfalls werde
ich ihn nicht weiter beobachten.

Gruß Marco

Re: strftime() geht nicht richtig.

am 19.11.2004 09:12:33 von Daniel Jaenecke

Marco von Frieling wrote:


> mktime hatte ich vorher probiert.

Du sollst nicht probieren, sondern das Manual lesen; umso mehr, wenn etwas
nicht wie erwartet funktioniert.

Gruß
-dj-


--
Der Trick ist, die Grate zwischen den eigenen Wissensluecken zum
Bildungskanon und alles andere zu fachidiotischem Spezialwissen zu
erklaeren. [Andreas Kabel in de.etc.sprache.deutsch]

Re: strftime() geht nicht richtig.

am 19.11.2004 09:16:52 von Rainer Huebenthal

Moin Marco von Frieling, du schriebst:

> Komme halt aus der Ecke VO und .NET und habe noch nicht so viel mit PHP
> gemacht. Da ist alles mehr (.NET) oder etwas weniger (VO) streng
> typisiert, obwohl es in VO auch ein paar Spezialitäten gibt. Da entzieht
> es sich mir einfach jeder Logik, dass man mit Strings rechnen kann.
> Schließlich kann in einem String ja auch mal was anderes stehen als eine
> Zahl.

Herkunft von PHP ist hier nicht zu verleugnen, aus einem
Formular kommt schliesslich auch alles als String zurück. Es
ist aber sicher nicht verkehrt, sich den starken
Typisierungsschuh auch bei PHP anzuziehen, auch wenns
eigentlich ohne ginge.

cu
Rainer

--
http://www.reisetraeume.com

Re: strftime() geht nicht richtig.

am 19.11.2004 15:22:10 von Niels Braczek

Marco von Frieling schrieb:

> Da
> entzieht es sich mir einfach jeder Logik, dass man mit Strings
> rechnen kann. Schließlich kann in einem String ja auch mal was
> anderes stehen als eine Zahl.

127+12
ist erst mal auch nichts anderes als eine Zeichenkette. Als Mensch
machst du daraus wahrscheinlich 139, was leicht nachvollziehbar ist, PHP
macht daraus 127, was auch klar (und entsprechend dokumentiert) ist.
Strenge Typisierung braucht man nur um a) die Disziplin des
Programmierers zu ersetzen und b) Operatoren zu überladen.

MfG
Niels

--
There won't be anything we won't say to people to try and convince
them that our way is the way to go. [Bill Gates]

Re: strftime() geht nicht richtig.

am 19.11.2004 16:10:54 von Ehrenfried Ehrenstein

Niels Braczek schrieb:
> 127+12
> ist erst mal auch nichts anderes als eine Zeichenkette. Als Mensch
> machst du daraus wahrscheinlich 139, was leicht nachvollziehbar ist, PHP
> macht daraus 127,
>
Was? Nein! Oder funktioniert mein Ironiedetektor nicht richtig?

Ausgabe: 139

ehr...

Re: strftime() geht nicht richtig.

am 19.11.2004 16:27:46 von Niels Braczek

Ehrenfried Ehrenstein schrieb:
> Niels Braczek schrieb:

>> 127+12
>> ist erst mal auch nichts anderes als eine Zeichenkette. Als Mensch
>> machst du daraus wahrscheinlich 139, was leicht nachvollziehbar ist,
>> PHP macht daraus 127,

> Was? Nein! Oder funktioniert mein Ironiedetektor nicht richtig?
>
> Ausgabe: 139

Ich habe mich unklar ausgedrückt: 'PHP macht daraus bei der Umwandlung
in eine Zahl 127' wäre richtig gewesen.

echo (int)'127+12';

Ausgabe: 127

MfG
Niels

--
> Bitte FAQ lesen und Shift-Taste nutzen.
wieso shift-taste? versteh das nicht so ganz.
[Alexander Fleischer in dclpm]