簡體   English   中英

為什么 AngularJs 或 javascript 將 4 位字符串轉換為日期

[英]Why does AngularJs or javascript convert a 4 digit string as a date

我正在使用angularJs並且有一個字段作為varchar(10)存儲在MSSQL中。 只要數據不是像1234這樣的 4 個字符的數字,就會正確存儲和顯示數據。

當我保存該字符串時,db 的正確值為1234 ,但是當它顯示在 UI 中時,它看起來像一個日期: "1234-01-01T00:00:00.000Z"

html 使用{{project.PurchaseOrderNumber}}來呈現數據。

angularJs代碼:

projectService.getProjects().then(function (response) {
    $scope.projects = response.data;
    $scope.loading = false;
}, function() {
    messageService.showError("Failed to get projects. Please refresh and try again");
});


service.getProjects = function() {
    return $http.get(baseUrl + 'API/Projects/');
};

C#代碼:

[Route("")]
public List<Project> GetProjects()
{
    return _projectService.GetProjects(_companyId.ToString());
}


public List<Project> GetProjects(string companyId)
{
    return _databaseHelper.QueryProc<Project>("projects_get", new { companyId }).ToList();
}


public class Project
{
    public Guid Id { get; set; }
    public Guid CompanyId { get; set; }
    public string Status { get; set; }
    public string PurchaseOrderNumber { get; set; }
}

JSON字符串作為響應的一部分:

[{
    "Id": "daef5b27-fb8c-4804-a407-0165e17c3a60",
    "CompanyId": "76bca824-6e93-45a5-bc5a-ba20d030ebce",
    "Status": "New",
    "PurchaseOrderNumber": "1234-01-01T00:00:00.000Z"
}, {
    "Id": "09d87946-dec2-4721-bf71-df436919b599",
    "CompanyId": "76bca824-6e93-45a5-bc5a-ba20d030ebce",
    "Status": "New",
    "PurchaseOrderNumber": "160728"
}]

MSSQL代碼:

SELECT [id]
        ,[companyId]
        ,[status]
        ,[purchaseOrderNumber]
    FROM [dbo].[projects]

SQL結果在此處輸入圖片說明

我已經確認在GetProjects返回結果之前, purchaseOrderNumber仍然是1234 然而,當我打破$scope.projects = response.data; 它是日期格式。

更新

我剛剛檢查了 Chrome 中的網絡選項卡,看到數據實際上是正確的格式,但是當它提供給response.data它不是。

4:{Id: "daef5b27-fb8c-4804-a407-0165e17c3a60", CompanyId: "76bca824-6e93-45a5-bc5a-ba20d030ebce",…}
   CompanyId:"76bca824-6e93-45a5-bc5a-ba20d030ebce"
   Id:"daef5b27-fb8c-4804-a407-0165e17c3a60"
   PurchaseOrderNumber:"1234"
   Status:"New"

更新 2

我了解到這發生在任何領域。 如果它只包含 4 位數字(任何 4 位數字,以任何順序),則在提供給angularJs時將其呈現為日期

為什么 angular 會這樣做? 我該如何阻止?

也許您使用的輸入是 type="date" ?

您可以打印變量,因為它是這樣存儲的:

{{project.PurchaseOrderNumber|raw}}

Angularjs 在 JSON eval 之前刪除響應數據行

請參閱上面的解決方案,在您的情況下,transformRespose 將是

{
transformResponse : []
}

現在,一旦將 transformResponse 設置為 null,成功回調將是原始 json 而不是像 angularjs 中通常的對象。

如果您將 JSON 字符串解析為 json 對象並將日期字符串轉換為日期對象,則需要忽略 4 個字符值對象以轉換為日期對象

更新

我猜在你的角度數據服務或控制器的某個地方你正在將 json 字符串解析為 JSON 對象,並且有一個邏輯可以將日期字符串轉換為寫在那里的日期對象。 該邏輯將具有 ISODate 的 REGEX,因此您只需要改進該邏輯即可不考慮 4 位字符串來匹配 Regx。

我有完全相同的問題。 就我而言,我通過 JSON 將數據作為number發送到前端,然后 angular 將其解釋為日期。 通過將值更改為string我能夠使其正常工作。

但在你的情況下,也許可以用另一種方式嘗試它?

暫無
暫無

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

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