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ď č. 1Javascript 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.