Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Konwersja dat
Forum PHP.pl > Forum > Przedszkole
Wykrywacz
Czy zna ktoś sposób jak zrobić żeby wczytana data z pliku txt w foracie yyyy/mm/dd,
została rozpoznana przez php jako data dokładnie w tym układzie.

Tak aby nie traktował tego jak swykłe liczby.
nospor
Cytat
rozpoznana przez php jako data
Co przez to rozumiesz? Co chcesz osiągnąć?

Cytat
nie traktował tego jak swykłe liczby.
patrz pytanie wyzej smile.gif To nie moze byc traktowane jako liczby, bo masz tam znaki /
Wykrywacz
  1. <html>
  2. <title> Program do przeliczania przepracowanego czasu pracy</title>
  3. <?php
  4. $imp = file ("d:\Daty\dat.txt");
  5. $ilosc_dat = count($imp);
  6.  
  7. for ($i=0; $i < $ilosc_dat; $i++)
  8.  
  9. $wiersz = explode( ';', $imp[$i]);
  10.  
  11.  
  12.  
  13.  
  14. ?>


Tak wygląda to do czego narazie doszedłem
Kod
;83456;2005/01/01;2005/02/01;

to jest w pliku z którego pobiera

o co chodzi o prostą rzecz aby w tym wypadku można było wykonać działanie
(wiersz[3] - wiersz[2])+1= i aby zwróciło wartość po odjęciu tych 2 dat czyli w tym wypadku liczbę 32
nospor
  1. <?php
  2. function toDate($data){//funkcja konwertuje date yyyy/mm/dd na yyyy-mm-dd
  3. return str_replace('/','-',$data);
  4. }
  5.  
  6. $data1 = toDate('2005/01/01');
  7. $data2 = toDate('2005/02/01');
  8.  
  9. $liczbadni = (int)((strtotime($data2) - strtotime($data1)) / 86400);
  10. echo $liczbadni;
  11.  
  12. ?>

teraz se to juz tylko podczep do siebie smile.gif
Wykrywacz
Dzięki śliczne, jak trochę jeszcze poćwicze może też będe wstanie innym pomagać smile.gif.


Jeszcze jedno jak przerobić tą formułę żeby konwetował tak dowolnie wybrane daty, bo to jest z tego co widzę na sztywno.


A o to jak powinno to wyglądać finalnie (Udało mi się zrobić tongue.gif )
  1. <html>
  2. <title> Program do przeliczania przepracowanego czasu pracy</title>
  3. <?php
  4. $imp = file ("d:\Daty\dat.txt");
  5. $ilosc_dat = count($imp);
  6.  
  7. for ($i=0; $i < $ilosc_dat; $i++)
  8.  
  9. $wiersz = explode( ';', $imp[$i]);
  10.  
  11.  
  12. function toDate($wiersz){//funkcja konwertuje date yyyy/mm/dd na yyyy-mm-dd
  13. return str_replace('/','-',$wiersz);
  14. }
  15.  
  16. $wiersz[2] = toDate($wiersz[2]);
  17. $wiersz[3] = toDate($wiersz[3]);
  18.  
  19. $liczbadni = (int)((strtotime($wiersz[3]) - strtotime($wiersz[2])) / 86400);
  20. echo $liczbadni;
  21.  
  22.  
  23.  
  24.  
  25. ?>
nospor
Cytat
Jeszcze jedno jak przerobić tą formułę żeby konwetował tak dowolnie wybrane daty, bo to jest z tego co widzę na sztywno.
ale oco chodzi? blink.gif

co do kodu co pokazales, to masz lekkie niedociągniecie

  1. <?php
  2. for ($i=0; $i < $ilosc_dat; $i++)
  3.  
  4. $wiersz = explode( ';', $imp[$i]);
  5. ?>

To ci zapamieta tylko ostatni wiersz z pliku, gdyz w petli je ciagle nadpisujesz winksmiley.jpg

poprawka:
  1. <?php
  2.  
  3.  
  4. function toDate($wiersz){//funkcja konwertuje date yyyy/mm/dd na yyyy-mm-dd
  5. return str_replace('/','-',$wiersz);
  6. }
  7.  
  8. for ($i=0; $i < $ilosc_dat; $i++){
  9.  
  10. $wiersz = explode( ';', $imp[$i]);
  11.  
  12.  
  13.  
  14. $wiersz[2] = toDate($wiersz[2]);
  15. $wiersz[3] = toDate($wiersz[3]);
  16.  
  17. $liczbadni = (int)((strtotime($wiersz[3]) - strtotime($wiersz[2])) / 86400) + 1;
  18. echo $liczbadni.'<br />';
  19. }
  20.  
  21. ?>
Wykrywacz
A jak wygląda funkcja która pozwala na to że będzie osobno czytał kolejne wiersze osobno czyli jak wcześniej przeliczał ilość dni dla
Kod
;83456;2005/01/01;2005/02/01;


to teraz osobno liczy dla każdego wiersza
Kod
;83456;2005/01/01;2005/02/01;
;83456;2005/05/010;2005/06/25;
;83466;2005/05/010;2005/12/25;


chodzi o to żeby brał pod uwagę każde kolejne wiersze jako nową rzecz.

Bo może ich być 3 albo 1500
nospor
no i przeciez poprawki co ci nanioslem w poprzednim poscie to wlasnie robią. czy ty wogole odpaliles ten skrypt?
Wykrywacz
No właśnie odpaliłem tylko że w kolejnych wierszach nie odejmuje mi dat jako dat a jako liczby.
czyli wynik wychodzi
Kod
32
12959
13142

dla dat
Kod
;83456;2005/01/01;2005/02/01;
;83456;2005/05/010;2005/06/25;
;83466;2005/05/010;2005/12/25;
nospor
widze ze masz problemy z uzywaniem kombinacji klawiszy ctr+c, ctrl+v
ja mam wyniki takie:
Cytat
32
47
230


masz tu dla pewnosci jeszcze razcaly skrypt:
  1. <?
  2.  
  3. $imp = file ("dat.txt");
  4. $ilosc_dat = count($imp);
  5.  
  6. function toDate($wiersz){//funkcja konwertuje date yyyy/mm/dd na yyyy-mm-dd
  7.     return str_replace('/','-',$wiersz);
  8. }
  9.  
  10. for ($i=0; $i < $ilosc_dat; $i++){
  11.  
  12. $wiersz = explode( ';', $imp[$i]);
  13.  
  14.  
  15.  
  16. $wiersz[2] = toDate($wiersz[2]);
  17. $wiersz[3] = toDate($wiersz[3]);
  18.  
  19. $liczbadni = (int)((strtotime($wiersz[3]) - strtotime($wiersz[2])) / 86400) + 1;
  20. echo $liczbadni.'<br />';
  21. }
  22. ?>


edit:
pozatym nie:
Cytat
;83456;2005/05/010;2005/06/25;
;83466;2005/05/010;2005/12/25;


a:
Cytat
;83456;2005/05/01;2005/06/25;
;83466;2005/05/01;2005/12/25;


to tez moze byc przyczyną Twojego błędu winksmiley.jpg
Wykrywacz
Kopiować jednak potrafie:)

Właśnie przez te zera przed 10 wszystko się waliło.

Mam ostatnie pytanie

Kod
;83456;2005/01/01;2005/02/01
;83456;2005/05/10;2005/06/25
;83466;2005/05/10;2005/12/25


mam tu w 1 części czyli wiersz[1],
jak zrobić żeby można było napisać coś takiego
  1. <?php
  2.  
  3. if wiersz[1]=wiersz(ten w następnej linji, bądz kolejnych) then
  4. (wiersz[3]-wiersz[2])+(wiersz(następny3)-wiersz(nastepny2)-(wiersz(nast2)-wiersz[3]).
  5.  
  6. ?>
nospor
musisz se napisac funkcje, ktora przeleci po nastepnych index w tablicy i sprawdzi czy ktorys sie rowna

  1. <?php
  2.  
  3. function inNextRow($actualIndex, $imp){
  4. $ilosc_dat = count($imp);
  5.  for ($i=$actualIndex+1; $i < $ilosc_dat; $i++)
  6. if ($imp[$actualIndex] == $imp[$i])
  7. return $i;
  8.  return -1;
  9. }
  10.  
  11. ?>

funkcja zwraca index wiersza, ktory rowna sie twojemu lub -1 gdy nie znalazl nic.
Jak ja wykorzystac, pomysl sam. juz i tak za duzo powiedzialem winksmiley.jpg
Wykrywacz
czy w php jest odpowiedni sformułowanie sql'owego
  1. FROM


bo chciałbym zrobić coś takiego ale mi nie pozwala (w nawiązaniu do tematu powyżej)
  1. <?php
  2. if (wiersz[1] from current($imp) == wiersz[1] from next($imp))
  3. {
  4. $dni = (wiersz[7] from next($imp))- (wiersz[6] from current($imp));
  5. }
  6. else getnext($imp)
  7. ?>
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.