Format date string sintaksa

Kao što već rekoh, u jednom eko sustavu komponenti dolazi do potrebe da se format datuma prosljeđuje od komponente do komponente.
Ili komponente slušaju taj format datuma iz neke Global varijable. …ili jedna drugoj naređuju koji format treba prikazati.

Znači sve komponente moraju razumjeti istu regdate sintaksu…ili nastaje problem.

Zato se postavlja pitanje, koja regdate sintaksa će se odabrati u tu svrhu…koju će sve komponente razumjeti i koja će se postaviti kao normativ.

Treba vidjeti što uopće imamo na stolu, zasad je ova tema iznjedrila:
PHP: https://www.w3schools.com/php/func_date_date_format.asp
moment.js: https://momentjs.com/
C#: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings

…i tu PHP regdate vidno ispada iz neke uobičajene forme i već navedene ISO specifikacije: https://en.wikipedia.org/wiki/ISO_8601

Promašio si malo link za PHP dokumentaciju.

1 Like

Kad mozemo ocekivati nekakvu prvu verziju normjs-a?

Prva verzija je već davno u pogonu…a prva public verzija, to je već teško pitanje…

Nadam se za mog života :smiley:

Postoji i zove se date formatting

U biti sad si dobro objasnio, u biti je tvoj regdate date format.

Pa imaju ukoliko je isti programski jezik, da bi postigao crosscompatibility koristis timestamp, ali tebi nemos’ to objasniti. Sintaksa je ovisna o programskom jeziku koji koristis i nije u svim programskim jezicima ista, zato timestamp.

Ti mozes definirati u npr. conf.json da je format dd.mm.yyyy ali ces imati problem ako ti tu aplikaciju koristi neki amer, englez ili neko treci jer u prva dva slucaja je kod njih ispravan format yyyy.mm.dd i sta ces onda?

1 Like

(tek sad osjećam koliko je falio @creatifcode na forumu, da “oplete” po developerima :smiley: Molim lijepo, bez uvrede ikome, samo malo offtopičarim i iznosim mišljenjei divljenje. Postajem emocionalan :smiley: )

1 Like

'Ajd kad je bućkuriš tema o datetime, evo još kakva ideja:

kad treba da sačuvam neke fajlove, recimo kad pravim uporedne screenshoot-ove neke situacije ili kad save-ujem .mwb fajl da bi zadrž’o tekuće stanje relacija i tabela imam svoj format:
20190207202659UTC.ext (npr. database_diagram_20190207202659UTC.png) i tog se držim nevezano da li radim sam ili u timu.

Eto još malo zbrke u temu. :joy:

Timestamp nije uopće upitan, to sam ti već više puta rekao…pa nemam pojma zašto to uporno ponavljaš.
Naravno da je timestamp format za prijenos datuma, pohrane…itd…i da je on osnova iz koje se formatira datum za prikaz korisniku.

Koliko ja znam, good practice kaže da jedna metoda radi jedinstven prijenos ulaza na izlaz.
Znači, regdate ne zanima jel korisnik amer ili evropljan…on je samo instrukcija za formatiranje timestampa:
timestamp -> traženi format

E sad, komponenta koja se brine o lokalizaciji formata datuma prema regiji, neka se zove: localize_date_format()

…i sada ta komponenta brine koji format će prikazati kojem korisniku. Nešto tipa:

format.ameri = 'yyyy/MM/dd';
format.evropa = 'dd.MM.yyyy';
return format[korisnik_regija];

I sada što imamo?
Imamo komponentu localize_date_format() koja ovisno o regiji korisnika definira format datuma.
No što točno ona vraća?
Pa vraća regdate sintaksu, ili ti datum-formating-string sintaksu.. (Ja ću dalje u teksu koristiti regdate, jer je jednostavnij izraz)

I sada, sve komponente koje će se oslanjati na tu komponentu localize_date_format(), moraju razumjeti što im ona govori.
A da bi komponente razumjele što im localize_date_format() govori, moraju razumjeti regdate sintaksu koju im ona vraća.
A regdate sintaksu će razumjeti, ako znaju koju regdate sintaksu očekuju…i pravila te sintakse.

Kada bi recimo komponenta localize_date_format() vraćala sljedeće:

format.ameri = 'Y/m/d';
format.evropa = 'd.m.Y';
return format[korisnik_regija];

…to bi se isto dalo razumjeti, ali to je druga regdate sintaksa… i ako komponente nisu svjesne da dobivaju takvu regdate sintaksu, nastaje problem.

E sad, stvar je za većinu slučajeva poprilično trivijalna jer uglavnom formatiranje datuma se svodi na dd.MM.yyyy ili na yyyy/MM/dd.

No regdate sintaksa omogućava puno više od toga. I ako netko ide korak dalje sa formatiranjem, želio bi možda znati što točno sve regdate sintaksa nudi.
A za to nam je potrebna neka dokumentacija regdate sintakse…kao što ju imaju momentjs, php ili C#.

Ali kao što smo vidjeli u primjeru sa komponentom localize_date_format(), da postoji komunikacija između komponenti koja se odvija prosljeđivanjem regdate sintakse, onda je poprilično dobro da sve komponente komuniciraju sa istom regdate sintaksom.

Jer ako ne, stvar puca.

Iako bi moglo i bolje od timestampa za prijenos.
Po meni bi idealan format za prijenos bio:

BILO_ŠTO #timestamp

Znači u praksi bi to izgledalo:

07.02.2019 23:03:09.545 #1549576981911

ili

2019/02/07 23:03:09.545 #1549576981911

ili

Thu Feb 07 2019 23:03:09 GMT+0100 (Central European Standard Time) #1549576981911

ili samo:

#1549576981911

Na ovaj način bi se postiglo da je format datuma u prijenosu poprilično fleksibilan za one koji žele da vizualno mogu jednostavno ispratiti o kojem vremenu je riječ…a opet je format upotpunosti jedinstven za parsiranje za bilo koji engine.
Jer svaki engine bi znao da ga iza zadnjih škalica čeka timestamp koji mu je dovoljan da sazna sve o datom vremenu.

I normJS će to imati tako normirano.

<script src="https://momentjs.com/downloads/moment.js"></script>
var dateString = moment.unix(value).format("MM/DD/YYYY");

P.S. Isprika na ovoj temi svima koje sam uvrijedio. Nemam pojma zašto uvijek ovakve rasprave odu u žustri ton. Pogotovo isprike @jorgovan -u , prema tebi očito nisam bio korektan sugovornik ovog puta i stvarno sorkač zbog toga.

Iako, nebi vjerovao…ono što je zategnulu raspravu između nas, vezano uz ono filozofsko pitanje o postojanju i promjeni. Sve što sam ti rekao na tu temu neprikladnim tonom, rekao sam ti iz želje da te osvjestim toga…a ne da te uvrijedim. Iako nas nekada uvreda najviše potakne da se osvjestimo…pa je očito i uvreda bila upakirana od mene.

Stoga još jednom, sorkač zbog te uvrede i živio ti meni. :wink:

Je l’ to neko priznanje da će normJS ipak koristiti moment.js? :grinning:

moment.js uopće nije problematičan. Pošto ovdje nije bilo boljih prijedloga…on je logičan odabir.
A i kompatibilan je sa regdate sintaksom koju Microsoft gura i koja je na temelju ISO spomenutog.

Samo ja mislim izvući iz moment.js specifikacije vezane uz regdate sintaksu i napraviti zasebni dokument samo za regdate sintaksu. To nazvati odgovarajućim imenom i onda još momentjs kontaktirati da oni linkaju na izvor i da se usuglase da bi to trebala biti nit vodilja za sve.
Njima to ide u prilog…a regdate dokument dobije jaku referencu u samom startu.
Onda još i ako se microsoft usuglasi da je to dobar dokument sa svojom specifikacijom…eto druge velike reference. A njima oboje bi trebalo biti u interesu podupreti regdate sintaksu koju sami koriste.

Ali hoće li to uspjeti ili ne…meni je u konačnici i nebitno. Meni je bitno samo da ja upadnem u “kanal” kojim ide većina, i da za svoje komponente imam dobru dokumentaciju za regdate koja će i drugima biti već poznata/prihvatljiva.

Jedini problemčić je što momentjs i Microsoft koriste blago drugačiju regdate sintaksu…a da bi gornje
potpunosti uspjelo, njih treba spojiti na istu normu. :slight_smile:

Ako ne, ja ću se povezati makar sa jednim od njih dvoje. (Jer za to mi netreba druga strana, nego samo moja odluka da sljedim njihov regdate)

Jedan’esti post teme.
Mog’o je bez blama biti i drugi. #samokazem

@bozoou

Sve ok. Ali meni jos uvijek nije jasno zasto to radis i zasto ti to treba. Ne vidim poantu i primjenu.

Ako radis sa c#, drzis se c# i njegovih pravila, ako radis php, drzis se php-a i njegovih pravila itd.

Da je netko imao kod toga bilo kakav problem, to bi se vec odavno rijesilo. Ali ocito da funkcionira ovako , kako je.

Ako nastaviš niz, primjetit ćeš da JS nema svoju ugrađenu regdate sintaksu, nego da comunity koristi recimo moment.js biblioteku koja parsira “svoj” regdate.

Ja sam samo htio znati koji regdate je najšire korišten, tako da se sa razvojem svojih komponenti priklonim tom regdateu. Heto, samo to.

A ovo za druge jezike niisam trebao ni spominjati…to je već utopija…i trenutno nepotrebno i nebitno.
Mada, par sati posla je napraviti regdate parser…nikakva nauka. Tako da se isti regdate ubaci lako u bilo koji jezik.

Ali ako ćemo o utopiji, na laganom sam okidaču da napravim libriry svojih najčešće korištenih funkcija…i da ga napišem i za JS i za PHP i za C#, tako da u svim tim jezicima mogu baratati istom sintaksom.

Mrzi me već razmišljati kako se nešto zove u kojem jeziku…kad su to sve hebene iste metode…isti entiteti…i ima da se zovu istim imenom.
Sama sličnost u imenima svih tih metoda potvrđuje to što govorim…ljudi su čak i nesvjesno skoro izveli ista imena svih tih metoda.

I onda kada ulazim u novi jezik…prekucam cijeli libriry za novi jezik i tarannn…od prvog dana sam u poznatom okruženju… :slight_smile:

Ovako zabrovaljam PHP dok radim u C#, a to mi se ne sviđa.
Pored toga, ja cijelo vrijeme razvijam svoje librirye…tako da kada to sve povežem, razvoj mog librirya u C# ću brzo prenesi i na svoj libriry u PHP…

vidi ovdje:
https://www.w3schools.com/jsref/jsref_obj_date.asp

getTime() Returns the number of milliseconds since midnight Jan 1 1970, and a specified date

evo primjer.
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_gettime

getDate() Returns the day of the month (from 1-31)
getDay() Returns the day of the week (from 0-6)
getFullYear() Returns the year

https://www.w3schools.com/jsref/jsref_gettimezoneoffset.asp

Što se tiče jezika, postoje cheat sheet --u prijevodu ti se to odnosi na skraćenu listu funkcija.
I ne moraš pamtiti formate, kako se piše regex, ali moraš znati kako koristiti.

https://www.google.com/search?q=cheat+sheet+php&client=firefox-b-d&source=lnms&tbm=isch&sa=X&ved=0ahUKEwjw7_6I1qzgAhVyxaYKHV98CAsQ_AUIDigB&biw=1432&bih=839

Pitaj sad nekoga sa foruma, da li zna sve funkcije iz php-a sa svim parametrima. Kako da ne.