/ / Ako overiť dátum v prehliadači Chrome a firefox - javascript, google-chrome, dátum, cross-browser

Ako overiť dátum v prehliadači Chrome a firefox - javascript, google-chrome, dátum, cross-browser

V chrome sa snažím skontrolovať dátum, či je platný alebo nie.

Majú premennú:

var d = new Date("9/"); // Not a correct format

V prehliadači Chrome

console.log(new Date("9/")); // Output: Sat Sep 01 2001 00:00:00 GMT+0530 (India Standard Time) Which is wrong as I am providing wrong date.

Vo Firefoxe

console.log(new Date("9/")); // Output: Invalid Date

Používanie tiež date.toLocaleString() má výstup 06 May 2007 00:00:00 vo Firefoxe

av chrome to je 1/9/2001;

Moja otázka teda spočíva v tom, ako overiť dátum v prehliadači Chrome a zaistiť bezpečnosť kódu pred týmito rozdielmi. Ak potrebujete ďalšie podrobnosti, napíšte komentár.

odpovede:

5 pre odpoveď č. 1

Javascript Date API môže mať trochu zmiešané výsledky, ako ste objavili.

Najlepšou možnosťou, ktorú môžem navrhnúť, je použiť jednu z knižníc tretích strán, ktoré sú k dispozícii. Sú dve, ktoré môžem odporučiť - buď Moment.js alebo Date.js.

Obidva tieto liby majú oveľa lepšiu validáciu a analýzu a sú konzistentnejšie v rôznych prehliadačoch ako vstavaná trieda Date.


1 pre odpoveď č. 2

Správnou odpoveďou je použitie knižnice Javascript, ako to navrhol @Spudley moment.js.

Ak si však neželáte zahrnúť túto úžasnú knižnicu (alebo inú podobnú knižnicu), môžete skúsiť spustiť dátum pomocou regulárneho výrazu, ako je tento:

var date = "9/",
pattern = /(?:(?:d{2}[-/]){2}d{4})|(?:d{4}(?:[-/]d{2}){2})/,
isValid = false;

isValid = pattern.test( date );

Toto sa bude zhodovať yyyy/mm/dd, dd/mm/yyyy, mm/dd/yyyy a yyyy/dd/mm (plus niekoľko variantov [a problémov]).

Je to však mimoriadne naivné, nezodpovedá drvivej väčšine formátov dátumu, umožňuje zmiešané oddeľovače a celý rad ďalších problémov.

Opäť dôrazne odporúčame implementovať knižnicu ako moment.js, ale tento regex môže byť začiatkom.