seconds from epoch time TO readable date

Ai un website la care vrei o critica sau un sfat pentru al imbunatatii posteaza aici

seconds from epoch time TO readable date

Mesajde forapathy » Mie Aug 05, 2009 9:51 am

Lucrez de ceva timp la o aplicatie in php si toate timestampurile sunt puse in baza de date cu time() din PHP adica ceva de genu "1247500288" care inseamna 13 july 2009 ora 18:49. Sunt puse asa ca sunt mai usor de manipulat datele decat campurile date din SQL. (1247500288 inseamna numarul de secunde de la 1 ianuarie 1970 adica linux time sau epoch time)

Si cum era enervant sa tot dau echo la timestampuri (echo date('d m y', '1247500288') ) ca sa vad care e data cu pricina mi-am facut un mic script in actionscript 3 ca si asa tot ma chinui sa invat de ceva timp :D

Asa ca.. urmatorul script genereaza campul de input, campul de rezultat si un buton.
Va rog sa imi spuneti ce scriu gresit sau cum ar trebui sa fac refactor la cod sa arate mai bine .. mai scurt.. sau mai eficient.
Si nu in ultimu rand poate mai ajuta si pe altcineva chestia asta :P

Cod: Selectaţi tot
package
{
   import flash.display.Sprite;
   import flash.events.MouseEvent;
   import flash.text.TextField;
   import flash.display.Stage;
   import flash.display.StageAlign;
   import flash.display.StageScaleMode;
   
   public class  secondsToDate extends Sprite
   {
      private var isOld:Boolean          = false;
      private var titleField:TextField    = new TextField;
      private var inputDate:TextField    = new TextField;
      private var textField:TextField    = new TextField;
      private var goButton:Sprite       = new Sprite;
      private var butonText:TextField    = new TextField;
      
      public function secondsToDate()
      {
         // initiate a stage object and tell it to behave
         var swfStage:Stage    = this.stage;
         swfStage.scaleMode    = StageScaleMode.NO_SCALE;
         swfStage.align       = StageAlign.TOP_LEFT;

         // add a title to this shit
         titleField.text    = 'Linux/Epoch Time (in seconds)';
         titleField.width    = 390;
         titleField.height    = 20;
         titleField.x       = 10;
         titleField.y       = 10;
         addChild(titleField);
         
         // create input text field
         inputDate.type       = 'input';
         inputDate.name       = 'inputDate';
         inputDate.x       = 10;
         inputDate.y       = 30;
         inputDate.width    = 200;
         inputDate.height    = 20;
         inputDate.border    = true;
         inputDate.borderColor = 0xFFCCFF;
         addChild(inputDate);
         
         // create a button
         goButton.graphics.beginFill(0x00FF00, 1);
         goButton.graphics.drawRoundRect(10, 90, 100, 20, 8, 8);
         goButton.graphics.endFill();
         goButton.mouseChildren    = false;
         goButton.buttonMode    = true;
         goButton.useHandCursor    = true;
         addChild(goButton);
         // button title
         butonText.text       = 'Get Date';
         butonText.width    = goButton.width;
         butonText.height    = goButton.height;
         butonText.x       = 20;
         butonText.y       = 90;
         
         goButton.addChild(butonText);
                  
         // attach some functionality to the button
         goButton.addEventListener(MouseEvent.CLICK,
         function ():void
         {
            // get info from input text
            var inputSeconds:Date  = new Date(Number(inputDate.text) * 1000);
            
            var hours:String    = String(inputSeconds.getHours());
            var minutes:String    = String(inputSeconds.getMinutes());
            var day:String       = String(inputSeconds.getDate());
            var month:String    = String(inputSeconds.getMonth()+1);
            var year:String    = String(inputSeconds.getFullYear());
            
            // show results in a new textfield
            if(isOld){   textField.text = ''; } // reset the date field
            createTextField(String(hours + ':' + minutes + ' | ' + day + ' / ' + month + ' / ' + year));
            
         });
      
      }
      
      // create the textfield for the result and insert information
      private function createTextField( resultValue:String ):void
      {
         isOld = true;
         
         textField.autoSize = flash.text.TextFieldAutoSize.LEFT;
         textField.height = 20;
         textField.x = 10;
         textField.y = 60;
         textField.background = true;
         textField.backgroundColor = 0xCCCCCC;
         textField.text = resultValue;
         
         addChild(textField);
      }
   }
   
}
Scriu pe point47 despre PHP, ActionScript 3 si CSS iar pe ignoranceisbliss.eu scriu despre toate prostiile ce-mi trec prin minte.
Avatar utilizator
forapathy
 
Mesaje: 107
Membru din: Mie Aug 06, 2008 3:04 pm

Re: seconds from epoch time TO readable date

Mesajde Lagro » Mie Aug 05, 2009 12:27 pm

EDIT: Cred ca am copiat codul gresit prima data si mi-a dat niste erori.
Vad ca este OK
Avatar utilizator
Lagro
 
Mesaje: 117
Membru din: Sâm Dec 06, 2008 10:12 am
Localitate: Constanta

Re: seconds from epoch time TO readable date

Mesajde Barna Biro » Mie Aug 05, 2009 5:52 pm

Să încep cu o laudă ( te descurajez pe urmă :) ): bravo pentru inițiativă ( ai avut buna voință să împarți ceva, făcut de tine, cu întrega comunitate și nu numai ) și pentru faptul că experimentezi și exersezi. ;)

Acuma, partea mai nasolă... Voi încerca să fiu cât mai succint:

1) Nu văd rostul stocării stage-ului într-o variabilă... Nu spun că e rău, doar că e cam senseless.
2) Refolosibilitate = 0. Cum te-ai gândit să refolosești treaba asta? De fiecare dată o să setezi clasa asta ca și document class și gata? Dacă mai e ceva de adăugat atunci pur și simplu începi să bagi cod în plus pe lânga treaba asta? Cam nasol... La fel si cu „customizibilitate”, ai toate valorile asociate manual... poate la un moment dat o să vrei să ai text field-ul mai mare, te pui și cauți prin cod „oare unde l-am definit?” ?
3) Nu declara functii anonime si mai ales nu le declara in interiorul unei alte functii.
4) Sincer, nu prea văd rostul clasei în sine... Adică, ok, introduci ceva cifre într-un field ( care cică-s secunde ) și când dai click pe buton atunci transformi ciferele in Date... and the point is? :) Don't get me wrong, ca și exercițiu, să spunem că merge, dar ca și utilitate, personal, nu-i văd rostul.
5) Dacă vroiai să faci cumva o componentă care să conțină aceste elemente și pe care să poți s-o refolosești atunci mda, not good... e mult prea rigid si prezenta stage-ului devine și mai senseless.

Dacă tot doreai să faci ceva care transformă cifre în Date atunci mai bine făceai un utility class unde defineai o metodă statică de genul „secondsToDate” ( cum ai denumit-o și tu ) și puteai să refolosești clasa respectivă oricând și oriunde... nu trebuia să te mai complici și cu butoane și nu știu ce... interfața puteai s-o faci cum vroiai, și doar chemai metoda de transformare când era cazul.

PS: Apropo, referitor la clase... Numele claselor ar trebui să înceapă cu o majusculă ( dacă numele clasei respective constă din mai multe cuvinte, atunci fiecare literă de început de cuvânt e majusculă, exemplu: WhatDoesThisDo, LoaderUsageExample ).

EDIT: Era să uit: în aplicația originală, presupun că stocai doar anul, luna și ziua? Dacă ai stocat cumva și ora și minute și secunde, atunci sper că ai și făcut ceva conversii pe acolo ca să fie timpul afișat corect în fiecare zonă de timp... tu dacă salvezi direct timpul citit de pe calculatorul tău care e GTM +2 atunci cam nasol... orice vizitator străin va fi derutat deoarece timpul afișat de tine nu va fi în sincron cu timezone-ul străinului... de fapt, dacă mă gândesc mai bine, ideal ar fi fost să faci aceste conversii și pentru an/lună/zi... să nu uităm că anumte țări sunt aproape cu o zi întreagă înaintea noastră, deci iară n-ar fi pușcat data. În caz de ai făcut aceste sincronizări, then just ignore what I have just said.
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: seconds from epoch time TO readable date

Mesajde forapathy » Joi Aug 06, 2009 5:48 pm

Genul asta de raspuns e exact ceea ce caut si de asta am si cerut ajutor.. ca e mai usor sa inveti cand este cineva care iti da cate una peste cap si iti zice "bah vezi ca acolo nu-i bine" :P
Daca aveam pe cineva sa imi dea peste cap si cand invatam PHP probabil mi-ar fi fost mult mai usor drumu ala :)
Anyway..
1: nu prea imi iesea din prima chestia cu stage-ul si nici nu prea ma documentasem despre Stage.. dar intre timp am citit si aia.. repar
2: Chiar nu m-am bazat pe refosibilitate deloc din simplul motiv ca scriptul asta trebuie sa faca doar atat.. sa imi spuna ce data este aia. Si cu valorile hard-codate stiu cum e si cam le-am lasat asa ca nu aveam nevoie de altceva.
3: am pus functie anonima dintr-un motiv foarte simplu: LENE. (si pt programatori asta e un atu zic eu :)) )
Defapt vazusem forma aia de functie scrisa pe undeva si m-am interesat cum se foloseste si mai mult de asta.. si imi place totusi sa folosesc functii anonime cand vine vorba de functionalitate care tine doar de eventul ala si nu e deloc complexa.
4 si 5: Cum spuneam.. nu am vrut sa fie mai mult de atat cat face... sa transforme secundele intr-o data.
Initial facusem butonul si textfieldul in flash cs si doar transformarea era cod.. si am zis sa fac totul din cod ca sa invat si eu ceva mai mult.
Si am facut clasa separata ca nu imi place sa fac cod in flash ide(cica) chiar daca e putin mai mult de scris intr-un fisier extern... asa ca scris cod in FlashDevelop si build cu Flash cs.(Nu imi place eclipse .. err shit flex builder .. desi imi place error checking-ul foarte bun)

Multumesc de raspuns si am sa incerc sa fac un update la cod si sa vad daca am invatat ceva din ce mi-ai zis :P
Scriu pe point47 despre PHP, ActionScript 3 si CSS iar pe ignoranceisbliss.eu scriu despre toate prostiile ce-mi trec prin minte.
Avatar utilizator
forapathy
 
Mesaje: 107
Membru din: Mie Aug 06, 2008 3:04 pm

Re: seconds from epoch time TO readable date

Mesajde Barna Biro » Joi Aug 06, 2009 6:00 pm

Bine :) Acuma, poate ar trebui să mă auto-corectez. M-am uitat un pic mai bine la treaba asta, și am ajuns la concluzia că de fapt nu era nevoie de niciun utility class sau something... Nu de alta, dar toată treaba de mai sus se rezumă la new Date(value * 1000); ... deci treaba cu „seconds to date” de fapt e o implementare internă a clasei Date, deci nu prea exstă niciun motiv pentru care ar fi nevoie de o clasă sau chiar funție separtă care ar face o astfel de transformare sau something.

Aș face o funcție/clasă separată pentreu așa ceva doar în cazul în care rezultatul returnat mai trebuie customizat sau „extins” cu alte lucruri... dar și așa, mai bine aș prefera să folosesc clasa Date cum e și să fac customizările pentru fiecare proiect în parte, așa cum e nevoie... Asta așa, mai „off topic”. :)

Oricum, bravo că experimentezi, ține-o tot așa. 8-)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: seconds from epoch time TO readable date

Mesajde forapathy » Dum Oct 25, 2009 8:15 pm

De cand am scris chestia aia am mai evoluat(si chiar sunt optimist cand zic asta) si intre timp m-am apucat sa mai citesc cate ceva si despre AIR si am zis sa refac mini-chestia-aplicatia aia ca program AIR.

Aplicatia o gasiti aici:
http://forapathy.net/tmp/timeToReadable.air
Sursa proiect Flex aici:
http://forapathy.net/tmp/timeToReadable.zip
(nu am gasit unde sa pun atasament la postare :P)

Din ce am citat pana acum.. Air are un sandbox mai extins si un grup extins de clase gen "File" in rest e doar aplicatie flash pe desktop :D
Scriu pe point47 despre PHP, ActionScript 3 si CSS iar pe ignoranceisbliss.eu scriu despre toate prostiile ce-mi trec prin minte.
Avatar utilizator
forapathy
 
Mesaje: 107
Membru din: Mie Aug 06, 2008 3:04 pm

Re: seconds from epoch time TO readable date

Mesajde Barna Biro » Dum Oct 25, 2009 9:51 pm

O scurta critica ( nu ca eu as face lucrurile perfect, dar la sfaturi cred ca ma pricep ):

    1) Mi-a luat vreo 5-7 secunde pana m-am prins ca daca vreau sa misc fereastra, trebuie sa trag de duda aia ( bara ) rosie... Come on... wtf? Unde naiba ai vazut asa ceva... pfff...
    2) Foarte nice ca te-ai gandit la verificari si arunci un mesaj de "Input a date." atunci cand nu introduc nimica... doar o singura problema: nu mai stiam care-i formatu date-ului care trebuie introdus dupa ce mi-a aparut mesajul "Input a date."... oricat de mult as fi dorit sa bag un date, nu mai stiam sub ce format trebuie bagat!!! That's sad deoarece a trebui sa inchid si sa repornesc aplicatia doar ca sa am sablonul de date in fata ( hh:mm | dd/mm/yyyy nu stiu cat e de usor de tinut minte, dar I for one don't stress my neurons to remember stuff like this... ). Pe scurt: cand faci astfel de verificari si handle-uiesti treaba cu mesaje, incearca sa afisezi mesajele de avertizare in asa fel incat sa nu influenteze "flow-ul" aplicatiei ( si sunt convins ca n-o sa fiu ultimu om care se va trezi nevoit sa reporneasca aplicatia din cauza ca nu mai stia cum sa introduca Date-ul dupa ce a dat un "Get time" fara sa introduce ceva in camp ).
    3) Tot referitor la handling: bine ca verifici daca omul introduce ceva in field, dar nu mai verifici daca textul introdus e valid sau nu :lol: am introdus "asas" si mi-a afisat: NaN:NaN | NaN / NaN / NaN ... not cool ( si acuma iara nu mai stiu ordinea in care tre sa bag lucrurile... noroc ca am post-ul in fatza :D )
    4) Acuma, am introdus: "10:23 | 22/10/2001" ( fara ghilimele, evident ) si imi spune "Input date too long"... Come on, wtf?! E introdus exact ca-n sablon... acuma care-i baiu ?! :D
    5) Na, ma dau batut... am incercat de vreo 3-4 ori cu diferite date-uri, respectand format-u impus de tine, dar tot nimica "Input date too long." ... Annoying... Un exemplu sau something nu ar fi stricat ( sau macar de mergea cu format-u asa cum teortic ar fi trebuit :) ).

As mai fi vrut sa incerc si o valoare de genu "xx:21 | 13/09/2009" sau sa dau o valoare care nu exista ( gen: "luna 13" ): 23:10 | 12/24/9999 dar na... maybe rezolvi problemele si postezi treaba din nou sa vad si eu ca functioneaza :P Apropo, nu scrie niciunde daca hh:mm sunt format de 12 ore sau 24 ?? ( adica de genul 12:23 PM sau 24:23 ).

Heh... Don't get me wrong, e foarte bine ca experimentezi si toate cele dar incearca sa testezi macar lucrurile cat de cat inainte sa le postezi pe un forum public ( sau sa le imparti cu lumea pe care "o manca-n" cur sa tot dea click-uri aiurea si sa introduca valori incorecte ).

Anyway, e un inceput... Sa nu cumva te lasi descurajat de acest reply, desi am un stil "mai dur" de a comenta creatiile altora. Merg pe ideea ca "what does not kill you, only makes you stronger" ( si prefer sa ofer o opinie sincera si cat de constructiva se poate, decat sa "iti zambesc fals si sa te las sa te muste viata de fund mai tarziu" ), stiu ca nu sunt toti de acord cu acest stil, dar aste... :P

Bafta si sper sa vedem o versiune mai "bug-free" si mai user-friendly. 8-)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: seconds from epoch time TO readable date

Mesajde Barna Biro » Dum Oct 25, 2009 10:00 pm

Haha... Bine ca m-am pus sa recitesc primul reply de abia dupa ce am postat mesajul de mai sus... Deci, tu de fapt, asteptai o valoare de genu: 1231232474 si transformai treaba asta in ceva de genu: 11:1 | 6 / 1 / 2009 ... Mda, atunci inca o remarca:

- Ce naiba e cu duda aia de hh:mm | dd/mm/yyyy acolo jos? E total derutanta treaba aia... Mai bine ofereai ceva explicatii calumea acolo ca sa inteleaga orice nestiutor ( ca si mine ) ca in input field trebuie sa introduc o valoare de genu: 1231232474 care dupa ce dau pe "Get time" va fi convertit si afisat intr-un format de genu: hh:mm | dd/mm/yyyy ...

Serios, din punct de vedere al user experience-ului ti-as da o nota negativa dar din pacate sistemul de notare incepe de la 0, si merge in sus. :) Work on these things, chiar si atunci cand experimentezi... conteaza mult sa te obisnuiesti cu lucruile "the good way" inca de la inceput, decat sa repeti prostii si sa te chinui mai tarziu sa te scapi de aceste obieceiuri proaste ( care par "mai comode" on the short run... dar on the long run, sunt a pain in the ass si o sa te coste mult ).

PS: Inca ceva: din moment ce stii ca valoarea introdusa trebuie sa fie formata din cel mult 10 cifre, atunci limiteaza input field-u la 10 caractere si te-ai scapat de o verificare ( treaba cu "is too long" )... si din moment ce stii ca vrei numai cifre, atunci limiteaza si caracterele care pot fi introduse ( restrict="0-9" ) si te-ai scapat de inca o verificare si de erori de genul NaN:NaN | NaN / NaN / NaN ...

PPS: Presupun ca Linux/Epoch Time (seconds) a vrut sa fie "hint"-ul care sa-l faca pe utilizator sa introduca gramada aia de cifre... Eu l-am considerat drept "titlul aplicatiei", chiar nu mi-a trecut prin cap ca text-ul respectiv ar avea de a face intr-un fel cu treaba pe care trebuie s-o introduct in fied ( poate daca era pe acelasi rand cu field-u... sau de mai continea si un ":"... sau something... ).

Ok, enough cu critica :D Baga mare in continuare. ;)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: seconds from epoch time TO readable date

Mesajde Barna Biro » Dum Oct 25, 2009 10:19 pm

Un ultim reply: din moment ce ai facut transformarea din secunde in date, de ce nu ai facut si o transformare inversa ( din Date in seconds... care chiar ar fi fost o treaba banala )? Nu de alta, dar nu stiu cati oameni stiu ca 2349237493 e nu stiu ce data... Daca ar fi avut posibilitatea sa introduca o data sub forma hh:mm | dd/mm/yyyy pe care s-o transforme in secunde si din secunde poate back "intr-o data readable", atunci sigur ar fi fost mai nice... Acuma chiar am incheiat reply-u. :)
Imagine
Avatar utilizator
Barna Biro
Administrator
 
Mesaje: 2037
Membru din: Vin Iul 25, 2008 1:06 am
Localitate: Lucerne, Switzerland

Re: seconds from epoch time TO readable date

Mesajde forapathy » Dum Oct 25, 2009 10:21 pm

UPDATE:
Am vazut ca ai mai scris in timp ce scriam si eu raspun:P
Da cam ala era hintul.. iar avand in vedere ca era facut initial pt a fi folosit "in house" nu prea mi-am batut capul cu user-friendly stuff :D
Ca idee trebuie sa refac putin interfata daca vreau sa fac release build :P
Si chiar nu stiam ca se pot face verificari de genul ala :D

Multumesc de hints dar si mai important de critica.
Cheers si numai de bine sa auzim.
----
In primul rand chiar apreciez criticile tale pentru ca sunt la obiect (cel putin din ce ai mi-ai mai raspuns mie :P)
si prefer sa mi se zica daca ceva nu e bun ca sa pot "repara" sau sa pot indrepta intr-o directie mai buna.

In al 2-lea rand despre aplicatie. Cand am postat am uitat sa specific niste chestii si se pare ca a cam dus la confuzie:)
Am pus aplictia doar de testing :D.. designul cu siguranta nu o sa castige niciun concurs.. Intreaga aplicatie mi-a luat cam juma de ora sa o fac asta luat in calcul si search-ul pe google dupa cum sa scap de borders si chrome-ul la fereastra. Asa ca la design mai am de lucrat :P daca e sa fac o versiune de release.. desi am mari dubii ca ar avea cineva nevoie :P

Tipul de data care trebuie introdusa e doar in secunda gen 1435235253 .. valoare generata de functia time() in PHP (adica numarul de secunda de la 1 ianuarie 1970). Aplicatia cum am mai zis am facuto sa ma ajute pe mine la niste debuging ca asa bagam datele in db sub forma aia.
Exemplul ala de acolo e doar "place holder" ca sa se stie ce fel de rezultat afiseaza.. iar acum imi dau seama ca e posibil sa incurce putin :D

Cat despre verificari .. sunt doar 2 pentru lipsa text si pentru lungime.. nu mai mult de 10 caractere :D.
Si aici mai e de lucru.

Toata chestia e ca asta e prima aplicatie Flex defapt.. si Air in acelasi timp.. si asta doar cu ce informatii am acumulat saptamana asta din video tutoriale de la lynda.com :P asa ca mai am muuuult de munca de invatat.

Anyway.. am sa mai pun niste updateuri de interfata si verificari si facut ceva mai intuitiv.. daca tot m-am apucat sa fac aplicatia macar sa o fac cum trebuie.

Zicea cineva ca omul nu invata nimic din "a castiga" insa din "a pierde" invata multe si unul din cele mai importante lucrui e ca e mult mai bine sa castigi.
Scriu pe point47 despre PHP, ActionScript 3 si CSS iar pe ignoranceisbliss.eu scriu despre toate prostiile ce-mi trec prin minte.
Avatar utilizator
forapathy
 
Mesaje: 107
Membru din: Mie Aug 06, 2008 3:04 pm

Următorul

Înapoi la Doresc o critica

Cine este conectat

Utilizatorii ce navighează pe acest forum: Niciun utilizator înregistrat şi 1 vizitator

cron