ExceptionType: «System.FormatException» Сообщение: «30/6/2019 не является допустимым значением для DateTime». - PullRequest
0 голосов
/ 21 июня 2019

У меня есть два запроса Ajax.Первый получает дату от средства выбора даты и проверяет дату в базе данных.Это работает нормально.

Второй запрос получает дату от средства выбора даты и извлекает первую дату месяца и последнюю дату месяца.Это приводит к ошибке.

Вот WebMethod:

[System.Web.Services.WebMethod]
public static string GetDateFromDB(DateTime compareDate)
{            
  string selectedDate = compareDate.ToString("yyyy/MM/dd");                           
  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT * from Holiday where Date='" + selectedDate + "'", conn);           
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);       
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);

  if (dt == null || dt.Rows.Count == 0)
    return "NG";
  else
    return "OK";
}

[System.Web.Services.WebMethod]
public static string GetFirstDateAndLastDate(DateTime firstDayDate, DateTime lastDayDate, string ddlName)
{
  string firstDay = firstDayDate.ToString("yyyy/MM/dd");
  string lastDay = lastDayDate.ToString("yyyy/MM/dd");

  SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["LoginDBConnectionString1"].ConnectionString);

  // testing purpose
  SqlCommand com = new SqlCommand("SELECT sum([NumberOfHours]) FROM [LoginDB1].[dbo].[tbOT] where [Date] between Date =  + '" + firstDay + "' And Date =  + '" + lastDay + "' AND name =  + '" + ddlName + "'", conn);
  SqlDataAdapter sqlDa = new SqlDataAdapter(com);
  DataTable dt = new DataTable();
  sqlDa.Fill(dt);     

  return "NA";            
}

Сценарий находится прямо ниже:

jQuery(function($) {
  $("[id$=datepicker]").datepicker({
    onSelect: function(dateText) {
      $(this).change();
      $.ajax({
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetDateFromDB",
        data: '{ "compareDate" : "' + dateText + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
          if (response.d == "OK") {
            alert("Today is Public Holiday!!!");
            $("[id$=txtOTRate]").val(1);
          } else if (response.d == "NG") {
            var date1 = $("[id$=datepicker]").datepicker('getDate');
            var day = date1.getDay();
            if (day == 1 || day == 2 || day == 3 || day == 4 || day == 5 || day == 6) {
              $("[id$=txtOTRate]").val(1.5);
            } else {
              $("[id$=txtOTRate]").val(2);
            }
          }
        }
      });

      var selectedDate = $("[id$=datepicker]").datepicker('getDate');
      //  var selectedDate = gg.getDate();
      //var selectedDate = $("[id$=datepicker]").val();
      var firstDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth(), 1);
      var lastDay = new Date(selectedDate.getFullYear(), selectedDate.getMonth() + 1, 0);

      var firstDayWithSlashes = (firstDay.getDate()) + '/' + (firstDay.getMonth() + 1) + '/' + firstDay.getFullYear();
      var lastDayWithSlashes = (lastDay.getDate()) + '/' + (lastDay.getMonth() + 1) + '/' + lastDay.getFullYear();

      var data = {};
      data.fristDayDate = firstDayWithSlashes;
      data.lastDayDate = lastDayWithSlashes;
      data.ddlName = $("[id$=ddlName] option:selected").text();

      $.ajax({
        type: "POST",
        url: "SupervisorOTRequest.aspx/GetFirstDateAndLastDate",
        // data: '{ "fristDayDate" : "' + firstDayWithSlashes + '" + "lastDayDate" : "' + lastDayWithSlashes + '"}',
        data: JSON.stringify(data),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
          if (response.d == "NA") {
            $("[id$=txtRemainHour]").val();
          }
        }
      });
    },
  }).on("change", function() {});

  function display(msg) {
    $("<p>").html(msg).appendTo(document.body);
  }
});

При проверке страницы в разделе Сеть> Заголовки> Запросить полезную нагрузку, она выходит правильно(ниже):

{fristDayDate: "06.01.2009", lastDayDate: "30/6/2019", ddlName: "Масрудин бин А.Б. Рахман"}
ddlName: "Масрудин бин А.Б. Рахман"
fristDayDate:" 1/6/2019 "
lastDayDate:" 30/6/2019 "

Однако при предварительном просмотре сообщения об ошибках выглядят следующим образом:

{Сообщение: «30/6/2019 не является допустимым значением для DateTime.»,…}
ExceptionType: «System.FormatException»
Сообщение: «30/6/2019 не является допустимым значением дляDateTime. "
StackTrace:"
в System.ComponentModel.DateTimeConverter.ConvertFrom (контекст ITypeDescriptorContext, CultureInfo culture, значение объекта)
в System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTyInInтип, сериализатор JavaScriptSerializer, логическое значение throwOnError, Object & convertObject)

В ответе сообщение об ошибке выглядит следующим образом:

{"Сообщение": "30/6/2019 не является допустимым значением для DateTime.", "StackTrace ":"
в System.ComponentModel.DateTimeConverter.ConvertFrom (контекст ITypeDescriptorContext, культура CultureInfo, значение объекта)
в System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal (объект o, тип serial, тип Type, тип,Boolean throwOnError, Object \ convert00Object)
в

1 Ответ

0 голосов
/ 21 июня 2019

Karrieop,

попробуйте это

DateTime firstDay= DateTime.ParseExact(firstDayDate, "yyyy/MM/dd", new CultureInfo("en-US"));  
...