eu sunt încercarea de a converti un șir de caractere în format zz-ll-aaaa într-un obiect date în JavaScript folosind următoarele:
var from = $("#datepicker").val();
var to = $("#datepickertwo").val();
var f = new Date(from);
var t = new Date(to);
("#datepicker").val()
contine o data în format zz-ll-aaaa.
Când am făcut cele ce urmează, se obține "Invalid Data":
alert(f);
Este acest lucru, deoarece de '-' simbol? Cum pot trece peste asta?
Split pe "-"
Analiza șirului în piesele de care aveți nevoie:
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Utilizarea regex
var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))
De ce să nu folosiți regex?
Pentru că știi'll fi de lucru pe un șir de caractere format din trei părți, separate prin cratime.
Cu toate acestea, dacă ați fost în căutarea pentru același șir de caractere în alt șir de caractere, regex ar fi calea de a merge.
Reutilizare
Pentru că tu're face acest lucru de mai multe ori mostre de cod, și poate și în altă parte în codul de bază, se încheie într-o funcție:
function toDate(dateStr) {
var parts = dateStr.split("-")
return new Date(parts[2], parts[1] - 1, parts[0])
}
Folosind ca:
var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)
Sau, dacă nu't mintea jQuery în funcție de:
function toDate(selector) {
var from = $(selector).val().split("-")
return new Date(from[2], from[1] - 1, from[0])
}
Folosind ca:
var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
Modern JavaScript
Daca're capabil de a utiliza mai moderne JS, matrice de destructurare este un frumos atinge, de asemenea,:
const toDate = (dateStr) => {
const [day, month, year] = dateStr.split("-")
return new Date(year, month - 1, day)
}
var from = $("#datepicker").val();
var f = $.datepicker.parseDate("d-m-Y", from);
Puteți scrie, de asemenea, o întâlnire dintre parantezele Data()
obiect, cum ar fi acestea:
new Date("Month dd, yyyy hh:mm:ss")
new Date("Month dd, yyyy")
new Date(yyyy,mm,dd,hh,mm,ss)
new Date(yyyy,mm,dd)
new Date(milliseconds)
Puteți utiliza o bibliotecă extern pentru a vă ajuta.
http://www.mattkruse.com/javascript/date/source.html
getDateFromFormat(val,format);
Vedea, de asemenea, acest lucru: https://stackoverflow.com/questions/1576753/parse-date-string-in-javascript
La răspunsul acceptat cam are un bug
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Ia în considerare dacă datepicker conține "77-78-7980" care, evident, nu este o dată validă. Acest lucru ar duce la:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
Care este, probabil, rezultatul dorit.
Motivul pentru acest lucru este explicat pe MDN site-ul:
în cazul în Care Data este numit ca un constructor cu mai mult de un argument, dacă valorile sunt mai mari decât lor logică gama (de exemplu, 13 este prevăzut ca valoare lună sau 70 de minute de valoare), adiacente valoare va fi ajustată. E. g. noua Data(2013, 13, 1)
este echivalent cu
noua Data(2014, 1, 1)`.
O modalitate mai bună de a rezolva problema este:
const stringToDate = function(dateString) {
const [dd, mm, yyyy] = dateString.split("-");
return new Date(`${yyyy}-${mm}-${dd}`);
};
console.log(stringToDate('04-04-2019'));
// Date 2019-04-04T00:00:00.000Z
console.log(stringToDate('77-78-7980'));
// Invalid Date
Acest lucru vă oferă posibilitatea să se ocupe de intrare invalid.
De exemplu:
const date = stringToDate("77-78-7980");
if (date === "Invalid Date" || isNaN(date)) {
console.log("It's all gone bad");
} else {
// Do something with your valid date here
}
new Date().toLocaleDateString();
simplu ca asta, trece doar data la Data Obiect js