我正在将值推入带有AJAX调用的ko.observalbeArray,我想在将其推入我的observableArray之前将JSON返回日期格式化为"YYYY-MM-DD".
我要转换的代码中的特定元素是:OrderTimeStamp:element.OrderTimeStamp以下是从服务器返回的日期示例:
/日期(1377200468203 + 0200)/
这是我的AJAX调用:
$.ajax({
url: "/[URL TO API Method]/GetAllOrdersbyparm",
data: {Parm: ko.toJS(MyDataViewModel.SelectedParmater), Start: ko.toJS(MyDataViewModel.ParmStart), End: ko.toJS(MyDataViewModel.ParmEnd)},
type: "GET",
contentType: "application/json; charset=utf-8",
dataType: "JSON",
timeout: 10000,
success: function (Result) {
for (var i = 0; i < Result.d.length; i++) {
element = Result.d[i];
MyDataViewModel.OrderDetails.push({ OrderID: element.OrderID, OrderGUID: element.OrderGUID, OrderTimeStamp: element.OrderTimeStamp, OrderStatus: element.OrderStatus, QtyProductsOnOrder: element.QtyProductOnOrder, PaymentDate: element.PaymentDate });
}
},
error: function (xhr, status) {
alert(status + " - " + xhr.responseText);
}
});
Run Code Online (Sandbox Code Playgroud)
因此,这是ASP.NET特定的Microsoft Date"标准".
请参阅 http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx 为什么应该像瘟疫一样避免它(1).
在该格式中,第一个组件是自UNIX纪元以来的UTC毫秒偏移量.偏移量为TO local time,与JS Date字符串表示形式中的时区偏移量相反.
使用
var dateString = myDate.toJSON();
Run Code Online (Sandbox Code Playgroud)
序列化JS Date对象以进行发送.
这样的序列化日期时间字符串也是UTC(aka*Z*ulu),可用于创建Date对象:
var myDate = new Date(dateString);
Run Code Online (Sandbox Code Playgroud)
(1)如果你需要支持这种旧的ASP.NET日期格式,你可以将它转换为适当的JS日期(感谢[Roy Tinker] [2]):
myDate = new Date(parseInt("/Date(1377200468203+0200)/".substr(6)));
Run Code Online (Sandbox Code Playgroud)
我不熟悉那个特定的日期时间表示法.
那是本土的吗?
那有文件吗?
如果没有,那么你就是在试图解释它时遇到麻烦.
转换为JSON会使其成为UTC时间,并且有一些事情可以解释,除非记录在分钟(无双关语)细节中.
所以这是我的答案:请确保您在规范性写作中有上述定义.
现在让我絮絮叨叨地说:
我在这里经历了那个小练习......
http://en.wikipedia.org/wiki/ISO_8601将成为基于日期时间表示法的良好标准.
现在,你已经从服务器获得了这种格式,这个格式看起来像是自纪元以来的毫秒时间值('1970-01-01T00:00:00Z'),(可能已经应用了时区偏移!)结合了HHMM中的时区偏移字符串.
这有点可怕,因为这两个组件混合不好.
评估为表达式1377200468203 + 0200将减去八进制!200毫秒!来自1377200468203.这显然不是预期的.
在ISO8601(此表示法不是)中,此时区偏移量将是FROM UTC,因此毫秒值已经应用了2小时0分钟的偏移量.
现在,代码当然可以在与给定日期时间不同的时区上运行.
非常关键的问题是这个毫秒日期时间值是否确实存在其中的UTC偏移量.
在那种情况下,做var dt = new Date(1377200468203); 会错的.
如果它接近夏令时切换时间,则仅减去偏差就不正确.
| 归档时间: |
|
| 查看次数: |
5805 次 |
| 最近记录: |