Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] wygasniecie newsa
-dark_lion-
post
Post #1





Goście







Witam mam takie pytanie czy jest możliwe aby ustawić danemu newsowi czas jego wygaśnięcia? załóżmy ze dodałem w poniedziałek tekst na stronę główna i chciałbym żeby zniknęła po 2 dniach od czasu jego nadania.
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
MateuszS
post
Post #2





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

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


Możesz to zrobić zwyczajnie sprawdzając datę newsa, lub ilość sekund/minut/godzin jakie on już jest na stronie po czym jeżeli przekroczy zadeklarowaną ilość usunie się (a właściwie zrobi to nieświadomie pierwszy user który wejdzie na stronę i odpali kod) lub ukryje. Można też użyć CRON'a. To takie coś że odpala skrypt kiedy chcesz, nie musisz wchodzić na tę stronę, serwer się tym zajmuje, dokładnie nie wiem jak akurat CRON działa bo się nim nie bawiłem ale jest masa artów na necie i na tym forum o CRONIE.
Go to the top of the page
+Quote Post
vokiel
post
Post #3





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


A nie lepiej po prostu wyświetlać newsy, których data opublikowania jest nie starsza niż te 2 dni. Zwykły where w zapytaniu sql.
Go to the top of the page
+Quote Post
-dark_lion-
post
Post #4





Goście







hm najlepiej jak podam przykład. Chodzi mi o to ze.. załóżmy w CMS użytkownik dodaje newsa i zaznacza tam czas jego wygaśnięcia i po tym czasie albo się usuwa z bazy danych albo nie wyświetla go. zależy mi na tym żeby użytkownik decydował ile ma to potrwać zanim news przestanie być wyświetlany
Go to the top of the page
+Quote Post
thek
post
Post #5





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Najprościej? Niech ustawia datę/czas wygaśnięcia i tyle. Zapytanie sprawdzające będzie pobierało wszystkie aktywne, których czas wygaśnięcia jest większy niż aktualna data. To jest prostsze niż kombinowanie z cronami lub innymi pierdołami.Dodatkowo nawet jeśli ktoś by się uparł i wyświetlił, to możesz dodać, że już jest on nieaktualny.
Go to the top of the page
+Quote Post
-dark_lion-
post
Post #6





Goście







thek czy mogłbym cie prosic o mały przyklad ? (IMG:style_emoticons/default/smile.gif) nie za bardzo wiem jak sie za to zabrac ..
Go to the top of the page
+Quote Post
benio101
post
Post #7





Grupa: Zarejestrowani
Postów: 111
Pomógł: 10
Dołączył: 16.07.2009
Skąd: Toruń

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


Użytkownik dodaje parametr, po jakim czasie ma się artykuł usunąć np. w dniach.
Teraz zapisujesz to do bazy danych.

Przy pobieraniu artykułów, sprawdzasz, czy różnica Czasów jest <= czasu wygaśnięcia artykułu, np.

  1. function roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S){
  2. $dni=Array(13);
  3. $dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
  4. $roznica=0;
  5. if($R<$r || ($R==$r && $M<$m) || ($R==$r && $M==$m && $D<$d))return "Bł?d: próba podróży w czasie niemożliwa!";
  6. if(!przestepny($R) && $M==1 && $D==29)return "Bł?d: docelowa data nie istnieje!";
  7. if($r<$R){
  8. $_s=$_i=$_h=$ileDniMinelo=0;
  9. $_d=$_m=1;
  10. while($_m<$m){
  11. $ileDniMinelo+=60*60*24*$dni[++$_m-(!(przestepny($r) && $_m==2))];
  12. }
  13. $ileDniMinelo+=60*60*24*($d-$_d);
  14. $ileDniMinelo+=60*60*($h-$_h);
  15. $ileDniMinelo+=60*($i-$_i);
  16. $ileDniMinelo+=$s-$_s;
  17. $s=$i=$h=0;
  18. $d=$m=1;
  19. $roznica+=(365+przestepny(++$r-1))*24*60*60-$ileDniMinelo;
  20. }
  21. while($r<$R){
  22. $roznica+=(365+przestepny(++$r-1))*24*60*60;
  23. }
  24. while($m<$M){
  25. $roznica+=60*60*24*$dni[++$m-(!(przestepny($r) && $m==2))];
  26. }
  27. $roznica+=60*60*24*($D-$d);
  28. $roznica+=60*60*($H-$h);
  29. $roznica+=60*($I-$i);
  30. $roznica+=$S-$s;
  31. return $roznica;
  32. }
  33.  
  34. function przestepny($rok){
  35. return (!$rok%4 && !(!$rok%100 && $rok%400))?1:0;
  36. }
  37.  
  38. $r=$datanapisaniapostu[0].$datanapisaniapostu[1];
  39. $m=$datanapisaniapostu[2].$datanapisaniapostu[3];
  40. $d=$datanapisaniapostu[4].$datanapisaniapostu[5];
  41. $h=$datanapisaniapostu[6].$datanapisaniapostu[7];
  42. $i=$datanapisaniapostu[8].$datanapisaniapostu[9];
  43. $s=$datanapisaniapostu[10].$datanapisaniapostu[11];
  44. $R=date(y);
  45. $M=date(m);
  46. $D=date(d);
  47. $H=date(H);
  48. $I=date(i);
  49. $S=date(s);
  50.  
  51. // $datanapisaniapostu zawiera datę, kiedy post został napisany w formie rrmmddhhiiss, gdzie rr - rok%100, mm - miesiąc, dd - dzień, hh - godzina, ii - minuty, ss - sekundy.
  52. // $limit zawiera liczbę dni, ile artykuł jest aktywny, jest liczbą naturalną
  53.  
  54. // i teraz warunek:
  55.  
  56. if(roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S)<=60*60*24*$limit){
  57. // wyswietl artykuł
  58. } else {
  59. // nie wyświetlaj
  60. }
  61.  

edit: Poprawiłem linijkę, bo wdarła się literówka. Tak to jest, jak się pisze na pół przytomnym.

Ten post edytował benio101 11.01.2011, 15:35:57
Go to the top of the page
+Quote Post
vokiel
post
Post #8





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


@benio101, nie zrozum mnie źle, ale co to jest?

3 różne propozycje, limit ważności ustawiony na 7 dni
  1. SELECT * FROM 'aktualnosci' WHERE DATEDIFF(CURDATE(),DATE('data_stop'))<7;
  2. SELECT * FROM 'aktualnosci' WHERE CURDATE()>DATE_ADD(DATE('data_stop'),INTERVAL 7 DAY);
  3. SELECT * FROM 'aktualnosci' WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY)>DATE('data_stop');


Pobranie gdzie limit ważności jest ustawiony na stałe
  1. SELECT * FROM 'aktualnosci' WHERE DATE_SUB(CURDATE(),DATE('data_stop'))>0;
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A po co aż takie kombinowanie vokiel? Jeśli data jest na stałe to wystarczy porównac datę aktualną z datą stopu. Nie trzeba nic odejmować (IMG:style_emoticons/default/smile.gif)
  1. ... WHERE date(date_stop) > curdate()
A jeszcze lepiej to zamiast curdate() obliczyć datę w php i od razu posłać do skryptu.

A już całkiem pewnie będzie happy gdy mu podrzucisz datepickera w jQuery (czy innym ustrojstwie) by sobie tę datę kliknął (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
vokiel
post
Post #10





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Cytat(thek @ 11.01.2011, 00:29:40 ) *
A po co aż takie kombinowanie vokiel? Jeśli data jest na stałe to wystarczy porównac datę aktualną z datą stopu. Nie trzeba nic odejmować (IMG:style_emoticons/default/smile.gif)

Zależy od tego jak chce te limity ustawiać, czy na sztywno na ileś dni, czy wpisywać w configu po ilu dniach wpisy przestają być newsami, czy będzie podawał sztywną datę zakończenia ważności. Podałem kilka opcji, żeby można było sobie wybrać. Jeśli np ustawi sobie w configu ilość dni do dezaktualizacji newsa, to wtedy może sobie tą ilość dni przekazać jako parametr i odejmowanie/dodawanie się przyda.
Go to the top of the page
+Quote Post
thek
post
Post #11





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Z doświadczenia Ci powiem vokiel, że dodawanie i odejmowanie nie zdaje rezultatu. Zbyt łatwo o błąd. Zauważ, że przy dodawaniu i odejmowaniu musisz mieć zewnętrzny proces, który to nadzoruje (cron). Jeśli nastąpi awaria to masz dodawanie i odejmowanie załatwione na amen. jeszcze gorzej gdy ktoś "przejmie" ów zewnętrzny proces i zacznie się nim bawić. Za cholerę nie dojdziesz kto, kiedy i ile jakich modyfikacji dokonał. Co jeszcze ważniejsze... Dodawanie i odejmowanie konkretnej liczby sprawia, że tracisz informację o tym od kiedy do kiedy post był wyświetlany. W jednym z serwisów firmy w jakiej pracuję istnieją ogłoszenia, którym użytkownik może nadawać dowolne poprawne czasy ich wyświetlania. Jeśli czas aktualny zbiega się z podanym, to staje się nieautualny, mimo iż jest wciąż aktywny. "Znika" z serwisu, wyszukiwarki itp, ale mając jego link jest on nadal dostępny, tyle że pojawia się nad nim dodatkowa warstwa z przekreślonym napisem "Nieaktualna oferta". Dodatkowo każdy z terminów ma własne dane określone, czyli nie jest to "duplicate content", choć wiele rzeczy jest między terminami wspólnych. I NIGDY nie było problemów.

W innym, mającym już wiele lat, jest niestety metoda z ilością dni pozostałą do wyświetlania. To co z nim już cyrków było to dziękuję. A to provider miał w nocy jakieś konserwacje i kilka dni cron nie działał jak powinien i dni nie odejmowało. A to innym razem crony przez tydzień wywoływały się kilkukrotnie, przez co odejmowało te dni znacznie szybciej. Po prostu jaja :) Dlatego nie mam zaufania do modyfikacji bazy zewnętrznymi procesami. Tylko i wyłącznie SELECTY oraz określone na sztywno ramy do porównywania.
Go to the top of the page
+Quote Post
vokiel
post
Post #12





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Tu się chyba thek nie zrozumieliśmy. Miałem na myśli taką sytuację:
W aplikacji jest opcja ustawienia czasu ważności newsów. Czyli np admin systemu ustala, że teraz news jest newsem przez 7 dni - taką wartość ustawia. Następnie przy pobieraniu newsów pobierana jest liczba dni, gdy news jest aktualny i pobierane są tylko te, które spełniają warunek (konieczne jest oczywiście zapisywanie daty utworzenia newsa). Nie ma tu żadnego corna, procesów, usuwania, etc. Po prostu select, z tym, że zamiast ustawiania na sztywno - ważność jest pobierana z konfiga aplikacji.

W większości przypadków najlepiej jest ustawiać termin ważności dla każdego news'a osobno, indywidualnie, ale są też przypadki/systemy/wymagania, gdzie lepiej jak jest limit ustawiony odgórnie z łatwą możliwością zmiany.
Go to the top of the page
+Quote Post
thek
post
Post #13





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Ok... Takie coś ma sens jak napisałeś, ale jedynie gdy wszystkie mają te ograniczenie. A co jeśli nie ma tak być? Będziesz wprowadzał kolejne typy by rozróżniać, iż news admina lub moda ma być aktywny wiecznie, albo ma mieć ten czas dłuższy, lub wprowadzisz różne typy dla różnych użytkowników by rozpoznawać i nadasz im inne w konfiguracji zezwolenia czasowe? A co z newsami sensownymi tylko dla określonego momentu, okienka czasowego? Przypuśćmy sytuacja jest taka, że news ma być wyświetlany od X do Y, ale nie wcześniej, ani nie później, a dodatkowo zawsze jako przyklejony. Jeśli zechcę, to mogę nawet życzenia noworoczne ustawić sobie w takim systemie nadając postowi kilka kolejnych corocznych okresów wyświetlania i mogę zapomnieć o wszystkim (IMG:style_emoticons/default/winksmiley.jpg) Tak więc jest całość tylko zależna od faktu JAK on chce problem wygasania załatwić. Czy bardzo prosto, czy już w jakiś inteligentniejszy sposób.
Go to the top of the page
+Quote Post
benio101
post
Post #14





Grupa: Zarejestrowani
Postów: 111
Pomógł: 10
Dołączył: 16.07.2009
Skąd: Toruń

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


Cytat(vokiel @ 10.01.2011, 21:56:02 ) *
@benio101, nie zrozum mnie źle, ale co to jest?

Kod PHP, który w zależności od daty wyświetla post lub nie, tak jak chciał autor tematu.
Wasze propozycje są również dobre, choć o bardziej czasochłonne.

edit: faktycznie, do kodu wdarła się literówka. Już poprawiona (IMG:style_emoticons/default/smile.gif)
A mój kod jest nadal lepszy, bo szybszy (IMG:style_emoticons/default/haha.gif)

Ten post edytował benio101 11.01.2011, 15:38:08
Go to the top of the page
+Quote Post
vokiel
post
Post #15





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Cytat(benio101 @ 11.01.2011, 15:32:01 ) *
Wasze propozycje są również dobre, choć o bardziej czasochłonne.

A mój kod jest nadal lepszy, bo szybszy (IMG:style_emoticons/default/haha.gif)

(IMG:style_emoticons/default/biggrin.gif) To nie jest dział Humor
Go to the top of the page
+Quote Post
thek
post
Post #16





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Tu się zgodzę z vokielem. Bez urazy benio, ale Twój skrypt naprawdę nadaje się do działu humor. Nie będę wymieniał wszystkich przeciw, ale podpowiem choćby... Po co matematycznie sprawdzać przestępność roku, skoro można użyć choćby date('L', $rok) ? Po co liczyć różnicę tak, skoro można skonwertować datę do timestamp i to policzyć w góra 2 linijkach? Są także gotowe funkcje do tego jak date_diff Nawet nie mówię że i tak masz małe problemy w związku z przestawianiem godzin 2 razy w roku. Po co tworzyć problematyczne funkcje w miejscach, gdzie można się zdać na funkcje wbudowane? Lubisz utrudniać sobie życie?
Go to the top of the page
+Quote Post
melkorm
post
Post #17





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


Albo użyć chociażby obiektu DateTime gdzie przy użyciu DateInterval i diff (szkoda że dopiero od 5.3 :/) można napisać to w 2 linijkach i to w dodatku bez żadnego mnożenia/liczenia itp.
Powód edycji: [thek]: date_diff to alias na podane przez Ciebie rozwiązanie :)
Go to the top of the page
+Quote Post
thek
post
Post #18





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Byłbym zapomniał benio.... Nie widzisz skali problemu poruszonego. Ty podałeś jedną funkcję do liczenia różnicy czasu pomiędzy dwoma znacznikami czasowymi i skończyłeś. To co ja czy vokiel poruszyliśmy jest o przynajmniej 1 lub 2 poziomy wyżej, gdyż poruszyliśmy nie "jak napisać funkcję", ale "jak rozwiązać problem wyświetlania od strony aplikacji", w którym liczenie różnicy jest składową i to wcale nie najważniejszą. Pisząc bardziej obrazowo: zająłeś się wyjaśnianiem co to jest koło, podczas gdy vokiel lub ja podajemy autorowi co zrobić, by jego pojazd zaczął jeździć i wspominamy, że można użyć choćby koła (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
benio101
post
Post #19





Grupa: Zarejestrowani
Postów: 111
Pomógł: 10
Dołączył: 16.07.2009
Skąd: Toruń

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


Tyle tylko, że rozwiązałem całkowicie problem tak, jak Wy, a nie tylko jego część.
To, że korzystam z własnych skryptów w żaden sposób nie jest złe, wręcz przeciwnie, świadczy o moim zaangażowaniu i zrozumieniu programowania od podstaw.
Wy tylko byście korzystali z obiektów i gotowych już funkcji napisanych przez innych.

Tak, jak dobrego kierowcę rozpoznaje się po parkowaniu,
tak dobrego informatyka po własnych funkcji programowaniu.

I nie dość, że moja funkcja jest szybsza, to tak naprawdę zajmuje mniej miejsca.
Korzystanie z jakiejś funkcji includuje ją do kodu maszynowego, więc ta czy owak, moja funkcja zajmuje mniej miejsca niż Wasze.

Ale że programujecie tak od początku, to konserwatywnie nie zmienicie swoich poglądów i pomimo braku racji będziecie uważać się za "lepszych".
Go to the top of the page
+Quote Post
thek
post
Post #20





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Kompletnie mylisz pojęcia "dobrego i złego programisty". Dobry, to niekoniecznie taki, który potrafi napisać coś sam, ale taki, który ma na tyle szeroką wiedzę, że nie będzie wymyślać koła od nowa, ale także skorzystać potrafi z poprawnego kodu już istniejącego. Poza tym zadam Ci pytanie... Jeśli jakaś funkcja weszła jako wbudowana do języka to będzie ona wydajniejsza czy nie od samodzielnie napisanej? Zwróć uwagę, że Ty w tej jednej używasz 3 pętli i 6 razy wbudowanej date() okraszonych masą działań matematycznych, także w pętlach. Co będzie wydajniejsze? Dodam, że z Twojej strony kompletnie olewasz walidację, nie zwracasz uwagi na daty wcześniejsze niż rok 2000 i wiele dupereli. Uważasz, że masz szybszą? Zrobiłem test prosty... 100000 wywołań mojej i Twojej. Tu masz kod by to sobie przetestować:
  1. <?php
  2. function diff( $data, $data2, $type = 's') {
  3. if( !$start = strtotime($data) ) {
  4. throw new Exception('Data początkowa nie jest prawidłowa!');
  5. } elseif( !$end = strtotime($data2) ) {
  6. throw new Exception('Data końcowa nie jest prawidłowa!');
  7. } else {
  8. $sekund = abs( $start-$end );
  9. switch( $type ) {
  10. case 'w': //weeks
  11. return $sekund/604800;
  12. case 'd': //days
  13. return $sekund/86400;
  14. case 'h': //hours
  15. return $sekund/3600;
  16. case 'm': //minutes
  17. return $sekund/60;
  18. case 's': //seconds
  19. default:
  20. return $sekund;
  21. }
  22. }
  23. }
  24.  
  25. function roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S){
  26. $dni=Array(13);
  27. $dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
  28. $roznica=0;
  29. if($R<$r || ($R==$r && $M<$m) || ($R==$r && $M==$m && $D<$d))return "Błąd: próba podróży w czasie niemożliwa!";
  30. if(!przestepny($R) && $M==1 && $D==29)return "Bł?d: docelowa data nie istnieje!";
  31. if($r<$R){
  32. $_s=$_i=$_h=$ileDniMinelo=0;
  33. $_d=$_m=1;
  34. while($_m<$m){
  35. $ileDniMinelo+=60*60*24*$dni[++$_m-(!(przestepny($r) && $_m==2))];
  36. }
  37. $ileDniMinelo+=60*60*24*($d-$_d);
  38. $ileDniMinelo+=60*60*($h-$_h);
  39. $ileDniMinelo+=60*($i-$_i);
  40. $ileDniMinelo+=$s-$_s;
  41. $s=$i=$h=0;
  42. $d=$m=1;
  43. $roznica+=(365+przestepny(++$r-1))*24*60*60-$ileDniMinelo;
  44. }
  45. while($r<$R){
  46. $roznica+=(365+przestepny(++$r-1))*24*60*60;
  47. }
  48. while($m<$M){
  49. $roznica+=60*60*24*$dni[++$m-(!(przestepny($r) && $m==2))];
  50. }
  51. $roznica+=60*60*24*($D-$d);
  52. $roznica+=60*60*($H-$h);
  53. $roznica+=60*($I-$i);
  54. $roznica+=$S-$s;
  55. return $roznica;
  56. }
  57. function przestepny($rok){
  58. return (!$rok%4 && !(!$rok%100 && $rok%400))?1:0;
  59. }
  60.  
  61. $start1 = microtime(true);
  62. for($i = 0; $i<100000; $i++) {
  63. try {
  64. diff('2010-10-10 10:10:10', date('Y-m-d H:i:s'), 'd');
  65. } catch (Exception $e) {
  66. echo $e->getMessage();
  67. }
  68. }
  69. $stop1 = microtime(true);
  70. $start2 = microtime(true);
  71. for($j = 0; $j<100000; $j++) {
  72. $r=10;
  73. $m=10;
  74. $d=10;
  75. $h=10;
  76. $i=10;
  77. $s=10;
  78. $R=date('y');
  79. $M=date('m');
  80. $D=date('d');
  81. $H=date('H');
  82. $I=date('i');
  83. $S=date('s');
  84. roznicaCzasow($r,$m,$d,$h,$i,$s,$R,$M,$D,$H,$I,$S);
  85. }
  86. $stop2 = microtime(true);
  87. echo 'thek: '.($stop1-$start1).'<br />benio: '.($stop2-$start2);
  88. ?>

Cytat
thek: 5.2500369548798
benio: 9.1759741306305
Nadal uważasz, że Twoja jest szybsza? Jak dla mnie 2-krotnie wolniejsza. Dlatego zanim zaczniesz uważać, że masz lepszy "skill" po potrafisz napisać sam - przetestuj się i swoje funkcje a potem porównaj przejrzystość kodu... Moje 22 krótkie i bardzo czytelne oraz schludne linijki kodu czy 35 Twojego "nie wiem co się dzieje"?

Dodajmy, że Twój "skill" nie pozwolił Ci zauważyć, iż nie masz nawet swojego skryptu choć pobieżnie optymalizowanego pod katem przejrzystości i poprawności.
$dni[0]=$dni[12]=31; $dni[1]=28; $dni[2]=31; $dni[3]=30; $dni[4]=31; $dni[5]=30; $dni[6]=31; $dni[7]=31; $dni[8]=30; $dni[9]=31; $dni[10]=30; $dni[11]=31;
a
$dni[0]=$dni[2]=$dni[4]=$dni[6]=$dni[7]=$dni[9]=$dni[11]=31; $dni[1]=28; $dni[3]=$dni[5]=$dni[8]=$dni[10]=30;
krócej i bez błędu. Nie zauważyłeś, że nie ma miesiąca po grudniu -> $dni[12]
Do tego data musi być podana w formacie 'yymmddhhiiss' co jest kompletnie nieprzejrzyste, że o poprawieniu po Tobie błędów typu Notice nie wspomnę. I tak poszedłem na rękę bo nie walnąłem w wywołaniu tak jak sobie życzyłeś:
  1. $datanapisaniapostu = '101010101010';
  2. $r=$datanapisaniapostu[0].$datanapisaniapostu[1];
  3. $m=$datanapisaniapostu[2].$datanapisaniapostu[3];
  4. $d=$datanapisaniapostu[4].$datanapisaniapostu[5];
  5. $h=$datanapisaniapostu[6].$datanapisaniapostu[7];
  6. $i=$datanapisaniapostu[8].$datanapisaniapostu[9];
  7. $s=$datanapisaniapostu[10].$datanapisaniapostu[11];
  8. $R=date('y');
  9. $M=date('m');
  10. $D=date('d');
  11. $H=date('H');
  12. $I=date('i');
  13. $S=date('s');
ale już kulturalnie podałem policzone wartości jako 10 typu int, a więc bez dodatkowej konwersji typów. I tak kod poległ wolniejszy. Nadal masz wątpliwości czy test przeprowadzisz tym razem bez tekstów: "Wasze propozycje są również dobre, choć o bardziej czasochłonne." i PO testach czasowych. To, że ja wolę wykorzystać sprawdzone metody, zamiast po raz 1000 wymyślać koło na nowo nie świadczy o mojej ułomności, ale fakcie, że jestem inteligentny na tyle, by tego nie robić. Znam model matematyczny obliczania dni i co z tego? To koniecznie powód, by z niego korzystać? Zrobię to wtedy, gdy PHP nie udostępni mi gotowego lub zaproponowany przez język sposób/funkcja nie będą odpowiednio wydajne dla moich potrzeb.

To co zrobiłeś to "sztuka dla sztuki" i każdy przeglądający Twój kod będzie się zastanawiał CO Ty właściwie zrobiłeś. Mój czyta się po prostu wygodnie. Jest przejrzysty niemal do bólu. Jedyny zgryz może mieć człowiek gdy natknie się na abs. A zastosowałem to tylko po to, by można było stosować daty zamiennie. Twój kod wysypie wtedy tekstem o "podróży w czasie". Tak więc kolejny "minus" na konto Twojej funkcji. Jedyną osoą w temacie, która uważa że robi coś lepiej jesteś Ty. Nie mając bowiem nawet kodu z naszej strony założyłeś, że i tak Twój sposób jest lepszy. Do tego oczywiście nie wiesz chyba, że obliczenia silnika bazy danych są wielokrotnie szybsze niż obliczenia php jako języka interpretowanego. Nawet kilkunastokrotnie. No ale lepiej sypnąć, że się jest mastahem, kompletnie olewając testy jakiekolwiek. Ja Ci tylko zrobiłem test po stronie php. Gdybym miał zrobić test kodu php z zapytaniem sql, to byś się pogrążył. A czemu? Bo byś miał taki ciąg u siebie:
a) pobierz rekordy
b) policz czy można je wyświetlić (wolniejsze niż sprawdzenie w bazie)
c) wyświetl możliwe
versus
a) pobierz rekordy pasujące (tu są obliczenia wiele razy szybsze, bo na poziomie silnika, a nie interpretera języka)
b) wyświetl je

Dalej mam Ci wyjaśniać różnice czy już wystarczająco mocno pokazałem, że co jak co, ale zaledwie musnąłeś problem, który vokiel czy ja rozwiązaliśmy obszerniej, a na dodatek bez tekstów "mój kod lepszy i koniec"?


PS: z parkowaniem mnie rozwaliłeś :D Właśnie akurat teraz zdaję kurs prawa jazdy i wiesz co? Instruktor na kursie gdy widział jak parkuję stwierdził, że "gdyby kursanci robili to tak bezproblemowo jak Ty, to nie musiałbym parkowania uczyć". Dodam, że powiedział to gdy pierwszy raz miałem równoległe, czyli popularna "kopertę". Czyli jestem zajebistym kierowcą? Akurat tego bym nie twierdził, bo już po chwili przejeżdżałem na 4 biegu przez skrzyżowanie na pomarańczowym, a na następnej godzinie wchodziłem poślizgiem w zakręt 90 stopni mając 50 na liczniku i nogę na gazie, co on prawie palpitacjami przypłacił.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 22.08.2025 - 20:29