Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: konwersja formatu daty
Forum PHP.pl > Forum > PHP
Dominik
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).
TomASS
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.
Dominik
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
TomASS
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
Dominik
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.
TomASS
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.