saya mencoba untuk mengkonversi string dalam format dd-mm-yyyy menjadi objek tanggal di JavaScript menggunakan berikut:
var from = $("#datepicker").val();
var to = $("#datepickertwo").val();
var f = new Date(from);
var t = new Date(to);
("#datepicker").val()
berisi tanggal dalam format dd-mm-yyyy.
Ketika saya lakukan berikut ini, saya mendapatkan "Tanggal tidak Valid":
alert(f);
Ini karena '-' simbol? Bagaimana saya bisa mengatasi ini?
Split pada "-"
Mengurai string ke dalam bagian-bagian yang anda butuhkan:
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Menggunakan regex
var date = new Date("15-05-2018".replace( /(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"))
Mengapa tidak menggunakan regex?
Karena anda tahu anda'akan bekerja pada sebuah string yang terdiri dari tiga bagian, yang dipisahkan oleh tanda hubung.
Namun, jika anda sedang mencari yang sama string di dalam string lain, regex akan menjadi cara untuk pergi.
Kembali
Karena anda're melakukan ini lebih dari sekali dalam sampel kode, dan mungkin di tempat lain di basis kode, membungkusnya dalam sebuah fungsi:
function toDate(dateStr) {
var parts = dateStr.split("-")
return new Date(parts[2], parts[1] - 1, parts[0])
}
Menggunakan sebagai:
var from = $("#datepicker").val()
var to = $("#datepickertwo").val()
var f = toDate(from)
var t = toDate(to)
Atau jika anda don't pikiran jQuery anda fungsi:
function toDate(selector) {
var from = $(selector).val().split("-")
return new Date(from[2], from[1] - 1, from[0])
}
Menggunakan sebagai:
var f = toDate("#datepicker")
var t = toDate("#datepickertwo")
Modern JavaScript
Jika anda're dapat menggunakan lebih modern JS, para destructuring adalah sentuhan yang bagus juga:
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);
Anda dapat menggunakan perpustakaan eksternal untuk membantu anda keluar.
http://www.mattkruse.com/javascript/date/source.html
getDateFromFormat(val,format);
Juga lihat ini: https://stackoverflow.com/questions/1576753/parse-date-string-in-javascript
Jawaban yang diterima agak memiliki bug
var from = $("#datepicker").val().split("-")
var f = new Date(from[2], from[1] - 1, from[0])
Pertimbangkan jika datepicker berisi "77-78-7980" yang jelas bukan tanggal yang valid. Hal ini akan mengakibatkan:
var f = new Date(7980, 77, 77);
=> Date 7986-08-15T22:00:00.000Z
Yang mungkin tidak diinginkan.
Alasan untuk ini adalah dijelaskan pada MDN situs:
di Mana Tanggal yang disebut sebagai konstruktor dengan lebih dari satu argumen, jika nilai lebih besar dari mereka logis range (misalnya 13 disediakan sebagai nilai bulan atau 70 untuk nilai menit), yang berdekatan nilainya akan disesuaikan. E. g.
Tanggal baru(2013, 13, 1)
setara dengannew Date(2014, 1, 1)
.
Cara yang lebih baik untuk memecahkan masalah adalah:
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
Ini memberi anda kemungkinan untuk menangani input tidak valid.
Misalnya:
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();
sederhana seperti itu, hanya melewati tanggal js Objek Tanggal