在推入ko.observearray之前格式化JSON日期

在推入ko.observearray之前格式化JSON日期,json,knockout.js,Json,Knockout.js,我正在通过AJAX调用将值推送到ko.observable数组中, 在将JSON返回日期推送到observableArray之前,我想将其格式化为“YYYY-MM-DD” 我要转换的代码中的特定元素是:OrderTimeStamp:element.OrderTimeStamp 以下是从服务器返回的日期示例: /日期(1377200468203+0200)/ 以下是我的AJAX调用: $.ajax({ url: "/[URL TO API Method]/GetAl

我正在通过AJAX调用将值推送到ko.observable数组中, 在将JSON返回日期推送到observableArray之前,我想将其格式化为“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);
        }
    });
$.ajax({
url:“/[API方法的url]/GetAllOrdersbyparm”,
数据:{Parm:ko.toJS(MyDataViewModel.SelectedParmater),Start:ko.toJS(MyDataViewModel.ParmStart),End:ko.toJS(MyDataViewModel.ParmEnd)},
键入:“获取”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“JSON”,
超时:10000,
成功:功能(结果){
对于(变量i=0;i
注意,不确定下面是否回答了您的问题。如果没有,您可能会得到以下帮助:

按照这些思路应该可以做到:

var yyyy = element.OrderTimeStamp.getFullYear()
var mm = element.OrderTimeStamp.getMonth();
var dd = element.OrderTimeStamp.getDate();

var x = yyyy + '-' + (mm < 10 ? '0'+mm : mm) + '-' + (dd < 10 ? '0'+dd : dd)

element.OrderTimeStamp = x;
var yyyy=element.OrderTimeStamp.getFullYear()
var mm=element.OrderTimeStamp.getMonth();
var dd=element.OrderTimeStamp.getDate();
变量x=yyyy+'-'+(mm<10?'0'+mm:mm)+'-'+(dd<10?'0'+dd:dd)
element.OrderTimeStamp=x;
有关示例,请参见。作为参考,在
Date
s上有良好的文档记录


如果您需要更高级的日期和时间功能,我建议您查看。

因此,这是一个特定于ASP.NET的Microsoft日期“标准”

看 为什么它应该像瘟疫一样避免(1)

在该格式中,第一个组件是自UNIX纪元以来的UTC毫秒偏移量。 偏移量为本地时间,与JS日期字符串表示中的时区偏移量相反

使用

序列化要发送的JS日期对象

这样的序列化日期时间字符串也使用UTC(又称*Z*ulu)格式,可用于创建日期对象,因此:

var myDate = new Date(dateString);

(1) 如果您需要支持这种旧的ASP.NET日期格式,您可以将其转换为如下正确的JS日期(感谢[Roy Tinker][2]):


我不熟悉那个特定的日期时间符号

那是土生土长的吗

有相关文件吗

如果没有,那么你在试图解释它时就给自己设置了麻烦

转换为JSON将使其成为UTC时间,并且有一些事情可以解释,除非以分钟(没有双关语)的细节记录

这就是我的答案:确保你在规范性写作中有上述定义


现在让我再谈一谈:

我在这里做了一个小练习

这将是一个很好的基准日期时间符号

现在,您已经从服务器上获得了该格式,它看起来像是自纪元('1970-01-01T00:00:00Z')以来的毫秒时间值(可能已经应用了时区偏移!)与HHMM中的时区偏移字符串相结合

这有点可怕,因为这两种成分混合不好

作为表达式计算1377200468203+0200将减去八进制!200毫秒!从1377200468203开始。这显然不是我们想要的

在ISO8601中(此符号不是),此时区偏移量将来自UTC,因此毫秒值已经应用了2小时0分钟的偏移量

现在,代码当然可以在与给定日期时间不同的时区的机器上运行

非常关键的问题是,该毫秒datetime值是否确实具有与UTC的偏移量

那样的话,做什么 var dt=新日期(1377200468203); 那就错了


如果接近夏令时切换时间,仅从中减去以抵消将是不正确的。

感谢您的反馈,我不确定如何将上述函数包含到我的AJAX callHmmm中?你能在问题或提琴中包括你尝试过的东西,以及为什么它不起作用吗?在我的代码和链接的问题之间,我看起来很简单。下面是我得到的结果:Jacques,你的JSFIDLE没有指定任何库。您正在使用jQuery,对吗?哪个版本?I get Uncaught ReferenceError:$并没有为此定义,我们目前使用的是ISO 8601格式,但不确定应用程序部署时区。这就是我所指的。对我来说,最重要的部分是在一天结束时,无论应用程序集部署在哪里,最终用户是否能够在2个日期之间获得订单。我想一个可靠的设计会将所有日期时间保持在UTC,并且创建者的时区只会被记录下来,以便进行适当的演示。或者你可以猜测+0530(钦奈)中的用户现在是否会醒着与-0800(贝克斯菲尔德)中的用户交谈,作为一个例子。很好,但我如何将日期格式的日期添加到我的Ajax调用中:)下面是我的提琴,展示我得到的以及完整的Ajax调用:“最终用户能够在两个日期之间获得订单吗?”这是排序还是购买的顺序?是你的情况吗?
var myDate = new Date(dateString);
myDate = new Date(parseInt("/Date(1377200468203+0200)/".substr(6)));