Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Konwersja dat
Wykrywacz
post 21.02.2006, 14:46:25
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
nospor
post 21.02.2006, 14:50:19
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 smile.gif To nie moze byc traktowane jako liczby, bo masz tam znaki /


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 21.02.2006, 14:53:51
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 21.02.2006, 15:01:12
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 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 21.02.2006, 15:08:56
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ć 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. ?>


Ten post edytował Wykrywacz 21.02.2006, 15:35:14
Go to the top of the page
+Quote Post
nospor
post 21.02.2006, 15:52:22
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? 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. ?>


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 22.02.2006, 13:45:18
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 22.02.2006, 13:46:58
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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 22.02.2006, 13:50:37
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 22.02.2006, 13:53:53
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 winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 22.02.2006, 14:04:49
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 22.02.2006, 14:11:02
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 winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Wykrywacz
post 24.02.2006, 15:07:12
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 13.06.2025 - 08:57