Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Konwersja dat
Wykrywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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.

Ten post edytował Wykrywacz 24.02.2006, 15:10:12
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) To nie moze byc traktowane jako liczby, bo masz tam znaki /
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #3





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


  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
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #5





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


Dzięki śliczne, jak trochę jeszcze poćwicze może też będe wstanie innym pomagać (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/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. ?>


Ten post edytował Wykrywacz 21.02.2006, 15:35:14
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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? (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #7





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




no i przeciez poprawki co ci nanioslem w poprzednim poscie to wlasnie robią. czy ty wogole odpaliles ten skrypt?
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #9





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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;
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #11





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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. ?>
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Wykrywacz
post
Post #13





Grupa: Zarejestrowani
Postów: 726
Pomógł: 20
Dołączył: 8.12.2005
Skąd: Wrocław

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


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. ?>
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.08.2025 - 16:52