Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> konwersja formatu daty, data z rfc822 i iso8601
Dominik
post 4.03.2006, 13:05:06
Post #1





Grupa: Zarejestrowani
Postów: 339
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Szukam funkcji, ktora pozwoliła by na konwersje formatu daty rfc822 na format daty iso8601. Oczywisie można by to zrobić bez funkcji ale raczej tak bym nie chciał (bo zbyt dużo przypadków jest to zrealizowania a daty nie do końca są ze sobą zgodne). Mogę się zalożyć ze musi istnieć do tego funkcja (funkcje) bo to są dwa najpolularniejsze formaty daty tylko, że ja nie moge ich znaleść. Czy ktoś się spotkał z takimi funkcjami lub ma jakiś inny pomysł?

Dla tych, którzy mogli się z tym spotkać ale nie kojarzą rfc822 i iso8601 podaje najczęściej spotykaną budowę daty:
rfc822- Sat, 13 Dec 2003 18:30:02 GMT
iso8601 - 2003-12-13T18:30:02Z
Jak widać to są daty juz po konwersji (przedstawiają da samą datę). Oczywisie jest to bardziej skomplikowane niż widać na tym przykładzie ale to już chętni zobaczą sobie w specyfikacjach.
Jeszcze jedna uwaga: jeśli nie ma wprost funkcji to realizującej a ktoś zna coś to robi prawie to samo, to niech posłuży się powyrzszym przykładem (gdzie $data_rfc="Sat, 13 Dec 2003 18:30:02 GMT" a pod $data_iso ma się znaleść 2003-12-13T18:30:02Z).


--------------------
Go to the top of the page
+Quote Post
TomASS
post 4.03.2006, 14:26:20
Post #2





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Proszę smile.gif

strtotime

  1. <?php
  2. $data_rfc="Sat, 13 Dec 2003 18:30:02 GMT";
  3. $data = strtotime($data_rfc);
  4. echo date("Y-m-d H:i:s",$data); //2003-12-13 19:30:02
  5.  
  6. $data_rfc="Sat, 13 Dec 2003 18:30:02";
  7. $data = strtotime($data_rfc);
  8. echo date("Y-m-d H:i:s",$data); //2003-12-13 18:30:02
  9. ?>


Który czas wolisz (GMT czy środkowoeuropejski) zależy od końcówki GMT - jeśli wolisz 18:30 to usuń 4 ostatnie znaki z $data_rfc.

Ten post edytował TomASS 4.03.2006, 14:28:24


--------------------
Go to the top of the page
+Quote Post
Dominik
post 4.03.2006, 17:21:36
Post #3





Grupa: Zarejestrowani
Postów: 339
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Cytat(TomASS @ 2006-03-04 15:26:20)
Który czas wolisz (GMT czy środkowoeuropejski) zależy od końcówki GMT - jeśli wolisz 18:30 to usuń 4 ostatnie znaki z $data_rfc.

OK myślałem raczej czymyś w rodzaju rfctoiso. Moje uwagi:
1. Nie ma znaczenia jak ja wole bo pod zmienną bedzie siedzieć data zmieniająca się całkowicie wiec raz będzie GMT a raz nie (i tak jak wczesniej napisałem wszelkie zgodne z rfc822 mogą znaleść sie pod tą zmienną)
2. Właśnie tak próbowałem bawić się z data() (to będzie ostateczność) ale chyba nie da się tego przedstawić w standardzie iso8601, juz pomijając moje wypociny u Ciebie również format daty jest nie poprawny smile.gif
bo miało być 2003-12-13T19:30:02Z a nie 2003-12-13 19:30:02


--------------------
Go to the top of the page
+Quote Post
TomASS
post 4.03.2006, 17:25:59
Post #4





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Cytat
Ciebie również format daty jest nie poprawny
bo miało być 2003-12-13T19:30:02Z a nie 2003-12-13 19:30:02


Też masz problem, zamiast:
  1. <?php
  2.  
  3. echo date("Y-m-d H:i:s",$data);
  4.  
  5. ?>


Piszesz:
  1. <?php
  2.  
  3. $data_iso = date("Y-m-d",$data).'T';
  4. $data_iso .= date("H:i:s",$data).'Z';
  5.  
  6. echo $data_iso;
  7.  
  8. ?>


Masz to co chcesz smile.gif


--------------------
Go to the top of the page
+Quote Post
Dominik
post 5.03.2006, 12:59:33
Post #5





Grupa: Zarejestrowani
Postów: 339
Pomógł: 0
Dołączył: 17.06.2003
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Cytat(TomASS @ 2006-03-04 18:25:59)
Masz to co chcesz smile.gif

smile.gif No tak ale tak jak pisałem wcześniej to działa tylko na tym przykładzie (to było tylko takie wtrącenie o tym T), a jest jeszcze wiecej możliwości, które nie bardzo mi się chce rozpatrywać. Myślałem, że jest jakiś zestaw funkcji który się tym zajmie. Bo date() owczem ma dużo możliwości ale przez to wymaga pisania wielu if'ów... (a nie bardzo mi się chce analizowania spseudokodów w tych specyfikacjach i pisaniu warunków, które znając życie, i tak nie będą realizować wszystkich przypadków, a te które bedą to i tak pewnie nie wszystkie uda mi się przetestować, a to niesie za sobą problemy w przyszłości itp itd). Mimo wszsytko dzięki będę pisał wszystko ręcznie.


--------------------
Go to the top of the page
+Quote Post
TomASS
post 5.03.2006, 13:16:03
Post #6





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


Wogóle nie rozumiem o co Ci chodzi? O jakieś wiele ifów. Funkcja strtotime bardzo dobrze sobie radzi z większością data. To właśnie funkcja strtotime odpowiedzialna jest za zczytanie daty rfc822. Natomiast funkcja date() tylko generuje datę w odpowiednim formacie z uniksowego znacznika czasu. smile.gif


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.06.2025 - 20:54