PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Datumsformatierung aus mssql-Server


Neo76
20.10.2004, 10:33:42
Hallo Leute,

rätsel seit fast einem Tag an einem Problem und komme nicht weiter.
Ich habe in meinem mssql-Server ein Feld, dass mit datetime deklariert ist.
Wenn ich mir dieses Feld lade, wird mir der richtige Wert in meiner Tabelle angezeigt.

z.B. 17 Okt 2004 12:00:00

Diesen Wert möchte ich aber umformatieren in (TT.MM.JJJJ HH:MM:SS).
Ich habe es mit date(), mit strftime() proviert. Habe es vorher mit setlocale() definiert.
Es wird immer der "01.01.1970 01:00:00" ausgegeben. Wenn ich den SQl-String in meinem Query-Analyser vom SQl-Server eingebe, erscheint das Original-Datum.

Hat einer eine Idee, woran das liegen kann ?

Chris

c4
20.10.2004, 10:35:19
Zeig doch mal, wie genau Du es mit date() und strftime() probiert hast.

Neo76
20.10.2004, 10:45:57
Das ist mein letzter Stand:

$atime = mssql_result($resultsmc, $i, "Alarmzeit");
setlocale (LC_TIME, "German_Germany.1252");
echo strftime("%c %T", $atime);


Den Wert unter "German_Germany.1252" habe ich ermittelt, da war mal ein guter Hinweis in diesem Forum.

Vielleicht auch noch wichtig. Habe als Betriebssystem NT 4.0 und den Apache als Webserver.

Vielleich hilft Euch das weiter...

PS. Ich habe es zwar hinbekommen, aber etwas umständlich. Ich lasse mir die einzlenen Werte über den SQL-String schicken (tag, monat etc.) und bastel mir das dann alles wieder zusammen. Aber das kann ja nicht sein , oder ??

Chris

xabbuh
20.10.2004, 10:52:32
Original geschrieben von Neo76
Das ist mein letzter Stand:

$atime = mssql_result($resultsmc, $i, "Alarmzeit");
setlocale (LC_TIME, "German_Germany.1252");
echo strftime("%c %T", $atime);
strftime erwartet als zweiten Parameter einen Timestamp.

Gibt es in MSSQL keine Funktion ähnlich wie DATE_FORMAT in MySQL?

Oder gibt es eine Funktion, mit der du das Datum bei der Abfrage in einem Timestamp umwandeln kannst?

Neo76
20.10.2004, 11:12:16
Einen Befehl zum Formatieren des Feldes gibt. Da war aber das Ergebnis das gleiche.
Umwandeln in Timestamp habe ich ausprobiert :

Hier das Ergebnis:

Befehl:
select CAST(s_MeldungSignale1.Alarmzeit as timestamp) as Alarmzeit,

Ergebnis im SQL-Server:
Alarmzeit
-------------------
0x0000957300B15D78

Er macht da wohl eine Hexzahl daraus ? Ist das OK ?!? Auf meiner Webseite kommt dieses Feld dann so an.

•w´ül

xabbuh
20.10.2004, 11:22:11
Original geschrieben von Neo76
Hier das Ergebnis:

Befehl:
select CAST(s_MeldungSignale1.Alarmzeit as timestamp) as Alarmzeit,

Ergebnis im SQL-Server:
Alarmzeit
-------------------
0x0000957300B15D78

Er macht da wohl eine Hexzahl daraus ? Ist das OK ?!?
Damit wirst du nicht weiterarbeiten können. Es sei denn du wandelst das jetzt noch in eine Dezimalzahl um: hexdec() (http://de3.php.net/manual/de/function.hexdec.php). Ob das funktioniert, weiß ich nicht. Müsstest du mal ausprobieren.

Du könntest natürlich auch einfach auf MySQL umsteigen ;-)

Neo76
20.10.2004, 12:11:38
Privat verwende ich mysql.
Aber in der Arbeit bin ich da gebunden. Kann auch leider das Feld nicht als Timestamp definieren. Wäre nämlich möglich :-(

Die Rückverwandlung hat nicht funktioniert.

Habe jetzt aber eine andere Alternative gefunden. Ich muss damit ja nicht weiterrechnen, sondern es nur "anzeigen" lassen. Ich wandle das jetzt einfach in einen String um und gut ist. Habe jetzt keine Lust mehr.

Wieso er aber immer (egal bei welchem Zeiteintrag) er den 1.1.1970 hinschreibt verstehe ich trotzdem nicht.

Meine jetzige Lösung:

CONVERT(char(11),s_MeldungSignale1.Alarmzeit,104) as A_Date,
CONVERT(char(8), s_MeldungSignale1.Alarmzeit,108) as A_Hour,

Ergebnis
A_Date A_Hour
----------- --------
01.10.2004 10:45:46

In PHP einfach zusammengesetzt :

echo mssql_result($resultsmc, $i, "A_Date") . " " . mssql_result($resultsmc, $i, "A_Hour");

Keiner merkt was, sieht aus wie immer ;-)

Vielen Dank für Deine Unterstützung

PS: Falls Du trotzdem noch eine Idee haben solltest, ich teste es gerne !!