将日期从json转换为datetime

时间:2015-03-18 09:10:45

标签: c# json angularjs datetime

我有一个向c#controller发送步骤的函数。

$scope.saveProgress = function () {

    var step6 = {
        Id: $scope.stepId,
        ProblemId: $scope.problemId,
        WhenOptions: $scope.whenOptions,
        CounterMeasures: $scope.counterMeasures,
        CounterMeasureWhens: $scope.counterMeasureWhens,
        CompletedDate: $scope.CompletedDate
        // step 6 specific data
    };

    $http.post(ROOT + '/step/SaveA3Step6/', step6)
        .success(function (result) {
            // log to console?
        }).
        error(function (data, status, headers, config) {
            // log to console?
        });
};

一切都很好但日期总是在我的c#controller中以null结尾。

public JsonResult SaveA3Step6(A3Step6 a3Step6)
    {
        try
        {
            a3Step6.Save();
            return Json("OK", JsonRequestBehavior.AllowGet);
        }
        catch (Exception e)
        {
            return Json("Error" + e.Message);
        }
    }

调试时,我发现$scope.CompletedDate的格式为"/Date(1426636800000)/"。 因为我在c#中的A3Step6对象期望日期时间显示为空。

在将$scope.CompletedDate函数发送回我的c#控制器之前,有没有办法将$scope.saveProgress转换为{{1}}函数中的日期时间?

4 个答案:

答案 0 :(得分:0)

您可以使用DateTime.ParseExact指定解析日期所需的格式。

例如,如果在JS中具有以下格式的日期时间:

var d = Date(2015,3,18,11,22,25,0)
'Wed Mar 18 2015 11:28:35 GMT+0200'

您可以使用以下命令在C#中解析它:

DateTime dt = DateTime.ParseExact(a3Step6,
                                  "ddd MMM d yyyy HH:mm:ss GMTzzzzz",
                                  CultureInfo.InvariantCulture);

答案 1 :(得分:0)

您可以重复使用Angularjs的日期过滤器。你必须在控制器的构造函数中注入$ filter。

var cpltDate = $filter('date')($scope.CompletedDate, 'MM/dd/yyyy');
var step6 = {
    Id: $scope.stepId,
    ProblemId: $scope.problemId,
    WhenOptions: $scope.whenOptions,
    CounterMeasures: $scope.counterMeasures,
    CounterMeasureWhens: $scope.counterMeasureWhens,
    CompletedDate: cpltDate
};

日期过滤器的完整文档:https://docs.angularjs.org/api/ng/filter/date

答案 2 :(得分:0)

new Date().toJSON()

也应该有用。而不是新的Date()使用您想要的任何javascript Date对象。默认的MVC模型绑定器处理得很好。

答案 3 :(得分:0)

这里的问题似乎是$scope.CompletedDate是日期("Date(1426636800000)")的字符串命令。必须对其进行评估才能获得日期。

使用eval($scope.CompletedDate)eval($scope.CompletedDate).toUTCString()可能会解决问题。

var step6 = {
    Id: $scope.stepId,
    ProblemId: $scope.problemId,
    WhenOptions: $scope.whenOptions,
    CounterMeasures: $scope.counterMeasures,
    CounterMeasureWhens: $scope.counterMeasureWhens,
    CompletedDate: eval($scope.CompletedDate)
    // step 6 specific data
};