簡體   English   中英

通過將所有日期轉換為ISOString格式將Javascript數組格式化為JSON

[英]Format Javascript Array into JSON by converting all dates into ISOString format

我有對象的javascript數組,其中包含鍵和值。 我在數組中有很多日期,我想將整個數組轉換為正確的JSON,在此過程中,我還將數組中的所有日期轉換為ISOString格式。 我只能使用JQuery,UnderscoreJS或momentz庫。

我的JavaScript數組的初始格式:

{  
   "primaryPerformerId":"122418",
   "primaryGroupingId":"63913",
   "primaryCategoryId":"1",
   "name":"Test Concert Event",
   "venueId":"82",
   "placeConfigs":[  
      {  
         "placeConfigId":"1232392"
      }
   ],
   "defaultLocale":"en_US",
   "metas":[  
      {  
         "templateId":"201",
         "name":"Test Concert Event",
         "locale":"en_US"
      }
   ],
   "unknownEventDateIndicator":"false",
   "unknownEventTimeIndicator":"false",
   "eventStartTime":"05/18/2016 08:04 PM",
   "trueOnSaleDate":"05/18/2016 08:04 PM",
   "firstPresaleDate":null,
   "status":"active",
   "dynamicAttributes":[  

   ],
   "lastChanceDate":"05/18/2016 08:04 PM",
   "onSaleDate":"05/15/2016 08:04 PM",
   "confirmDate":"05/16/2016 08:04 PM",
   "earliestPossibleInhandDate":"05/16/2016 08:04 PM",
   "latestPossibleInhandDate":"05/18/2016 08:04 PM"
}

預期格式:

{  
   "primaryPerformerId":"122418",
   "primaryGroupingId":"63913",
   "primaryCategoryId":"1",
   "name":"Test Concert Event",
   "venueId":"82",
   "placeConfigs":[  
      {  
         "placeConfigId":"1232392"
      }
   ],
   "defaultLocale":"en_US",
   "metas":[  
      {  
         "templateId":"201",
         "name":"Test Concert Event",
         "locale":"en_US"
      }
   ],
   "unknownEventDateIndicator":"false",
   "unknownEventTimeIndicator":"false",
   "eventStartTime":"2016-05-18T20:04:00.000Z",
   "trueOnSaleDate":"2016-05-17T20:03:00.000Z",
   "firstPresaleDate":null,
   "status":"active",
   "dynamicAttributes":[  

   ],
   "lastChanceDate":"2016-05-18T20:04:00.000Z",
   "onSaleDate":"2016-05-12T23:38:18.775Z",
   "confirmDate":"2016-05-11T23:38:18.775Z",
   "earliestPossibleInhandDate":"2016-05-10T20:04:00.000Z",
   "latestPossibleInhandDate":"2016-05-11T20:04:00.000Z"
}

這應該做。 它使用正則表達式查找日期值,並使用自定義處理程序將JSON.stringify組合在一起。 我還要指出的是,這會將時區計算為運行此腳本的任何系統時區。 由於輸出時間將采用UTC,因此您可能需要事先確保時區正確。

 var o = { "primaryPerformerId":"122418", "primaryGroupingId":"63913", "primaryCategoryId":"1", "name":"Test Concert Event", "venueId":"82", "placeConfigs":[ { "placeConfigId":"1232392" } ], "defaultLocale":"en_US", "metas":[ { "templateId":"201", "name":"Test Concert Event", "locale":"en_US" } ], "unknownEventDateIndicator":"false", "unknownEventTimeIndicator":"false", "eventStartTime":"05/18/2016 08:04 PM", "trueOnSaleDate":"05/18/2016 08:04 PM", "firstPresaleDate":null, "status":"active", "dynamicAttributes":[ ], "lastChanceDate":"05/18/2016 08:04 PM", "onSaleDate":"05/15/2016 08:04 PM", "confirmDate":"05/16/2016 08:04 PM", "earliestPossibleInhandDate":"05/16/2016 08:04 PM", "latestPossibleInhandDate":"05/18/2016 20:04" }; document.body.innerText = JSON.stringify(o, function(key, value) { var res; if(res = /^\\s*([0-9]{1,2})\\s*\\/\\s*([0-9]{1,2})\\s*\\/\\s*([0-9]{1,4})\\s+([0-9]{1,2})\\s*\\:\\s*([0-9]{1,2})(?:\\s*(AM|PM))?\\s*$/i.exec(value)) { value = (o.defaultLocale === 'en_US' ? new Date(res[3], res[1]-1, res[2], res[6] ? (res[6].toUpperCase() === 'PM' ? 12 : 0) + (res[4] === '12' ? 0 : parseInt(res[4])) : res[4], res[5]) : new Date(res[3], res[2]-1, res[1], res[6] ? (res[6].toUpperCase() === 'PM' ? 12 : 0) + (res[4] === '12' ? 0 : parseInt(res[4])) : res[4], res[5]) ).toISOString(); } return value; }); 

暫無
暫無

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

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