У меня есть ввод (датапикер)
<input runat = "server" id = "txtdob" />
<asp:Button runat = "server" ID = "btnsubmit" Text = "Submit" OnClick = "btnsubmit_Click" ></asp:Button>
но когда я ввожу дату (не из календаря) в формате 26-06-1993, я получаю сообщение об ошибке, потому что месяц и дата заменяются при нажатии кнопки отправки, тогда я использую функцию Javascript для преобразования формата даты на focusout.
Javascript
<script>
$(document).ready(function () {
$("#txtdob").focusout(function () {
debugger;
var input_date2 = document.getElementById("txtdob").value;
debugger;
var myDate = new Date(input_date2);
var prettyDate =
('0' + (myDate.getDate())).slice(-2) + '-' +
('0' + (myDate.getMonth() + 1)).slice(-2) + '-' +
myDate.getFullYear();
document.getElementById("txtdob").value = prettyDate;
document.write(prettyDate);
});
});
</script>
но здесь я сталкиваюсь с той же проблемой, что и при вводе DOB = 06-26-1993, все работает правильно, и дата также конвертируется в формат 26-06-1993, но
когда я ввожу DOB = 26-06-1993, я получаю ту же ошибку.
Как это решить?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я понимаю вашу проблему, убедитесь, что это вам поможет
<script>
var YourStringValue= function (date, format) {
debugger;
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
getPaddedComp = function (comp) {
return ((parseInt(comp) < 10) ? ('0' + comp) : comp)
},
formattedDate = format,
o = {
"y+": date.getFullYear(), // year
"M+": months[date.getMonth()], //month
"d+": getPaddedComp(date.getDate()), //day
"h+": getPaddedComp((date.getHours() > 12) ? date.getHours() % 12 : date.getHours()), //hour
"H+": getPaddedComp(date.getHours()), //hour
"m+": getPaddedComp(date.getMinutes()), //minute
"s+": getPaddedComp(date.getSeconds()), //second
"S+": getPaddedComp(date.getMilliseconds()), //millisecond,
"b+": (date.getHours() >= 12) ? 'PM' : 'AM'
};
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
formattedDate = formattedDate.replace(RegExp.$1, o[k]);
}
} debugger;
return formattedDate;
};
$(function () {
debugger;
var tst = '26-06-1993';
var res = tst.split("-");
try {
var formattedDate = YourStringValue(new Date(res[1] + '-' + res[0]+'-' + res[2]), "d-M-y")
alert(formattedDate);
}
catch (err) {
alert('FormtString');
}
});
</script>
Ответы только на код не так полезны. Хороший ответ должен включать, почему у OP есть проблема и как ваш код исправляет ее. В (parseInt(comp) < 10) нет необходимости в parseInt, и миллисекунды добавляются неправильно. Ваш синтаксический анализ строки ошибочен, никогда не используйте встроенный синтаксический анализатор для нестандартных строковых форматов, а идея преобразования строки в текущую дату, а затем ее обратное форматирование в строку ненадежна и неэффективна. Использование Попробуйте поймать бесплатно.
Для этого типа проблемы есть Date.js, который автоматически преобразует значение.
Просто проверьте эту страницу с примером, поэтому нет необходимости создавать функцию, просто добавьте свою страницу и используйте ее по своему усмотрению.
поэтому, если вы введены как 20-08-2018 или 20/08/2018, которые показывают August 20, 2018
Ваша проблема здесь:
new Date(input_date2), см. Дубликат.