Преобразовать возвращаемое WebAPI DateTime в дату Javascript

#javascript #angularjs #datetime #asp.net-web-api2

#javascript #angularjs #дата-время #asp.net-web-api2

Вопрос:

У меня есть внутренний сервис, написанный на WebAPI, и интерфейс с AngularJS.Из серверной части я вернул дату — время, как показано ниже

 public async Task<DateTime> GetDateTime(Guid id)
{
    DateTime dateTime = GetDateTime();
    return dateTime;
}
  

Внутри контроллера angular я получил ответ, подобный этому

 service.getDateTime({
    id: $scope.id
},
function(data) {
    $scope.minSelectedScheduleDate = new Date(data);
    $scope.isBusy = false;
},
function(response) {
    $scope.isBusy = false;
});
  

Но minSelectedScheduleDate становится недействительной датой.

Когда я попытался просмотреть данные в консоли, я увидел что-то вроде этого:

 Resource {
    0: "2",
    1: "0",
    2: "1",
    3: "6",
    4: "-",
    5: "1",
    6: "0",
    7: "-",
    8: "2",
    9: "8",
    10: "T",
    11: "1",
    12: "1",
    13: ":",
    14: "3",
    15: "0",
    16: ":",
    17: "0",
    18: "0"
}
  

Мой вопрос в том, как я могу получить действительную дату в Angular Controller?

Ответ №1:

Вы должны возвращать дату в виде строки в формате ISO8601 из вашего веб-api. Чтобы преобразовать строку в дату, вам нужно вызвать метод parse для даты.

 $scope.minSelectedScheduleDate = Date.parse(data);
  

Комментарии:

1. Извините, это не работает. В нем говорится $scope.minSelectedScheduleDate , что NaN

2. @EmdadulSawon — awaiting все задачи находятся внутри вашего GetDateTime действия? Можете ли вы поделиться кодом службы angular для service.getDateTime ?

Ответ №2:

Я думаю, что вы получаете дату в качестве ответа в объектном формате строки, поэтому попробуйте это

 function(data) {
    var dateString="";
    for(var prop in data)
        dateString =data[prop];
    $scope.minSelectedScheduleDate=new Date(dateString);
}
  

Ответ №3:

Проблема в том, что я возвращаю объект DateTime напрямую. Если я возвращаю анонимный объект из моего контроллера, то Javascript десериализует все нормально. Вот мой текущий контроллер:

 public async Task<DateTime> GetDateTime(Guid id)
{
    DateTime dateTime = GetDateTime();
    return new
    { 
        ScheduleDate = dateTime
    };
}
  

Ответ №4:

У нас есть приложение Angular, которое возвращает свойство revisionDate: Date из службы WebAPI. Первое, что мы делаем с ним после загрузки, чтобы преобразовать его в дату javascript, вот так:

 // convert WebApi date format to javascript format
myJsonObject.revisionDate = new Date(myJsonObject.revisionDate.toString());