簡體   English   中英

將日期從json轉換為datetime

[英]Convert Date from json to datetime

我有一個函數可以將步驟發送到我的C#控制器。

$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#控制器中,日期始終以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對象期望的日期時間顯示為null。

有沒有一種方法可以將我的$scope.CompletedDate轉換$scope.CompletedDate我的$scope.saveProgress函數中的日期時間,然后再將其發布回c#控制器?

您可以使用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);

您可以重用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

new Date().toJSON()

應該也可以。 代替新的Date(),使用您想要的任何JavaScript Date對象。 默認的MVC modelbinder可以很好地處理此問題。

這里的問題似乎是$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
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM