Javascript 在客户端(JS)上将C#DateTime转换为LocalTime

Javascript 在客户端(JS)上将C#DateTime转换为LocalTime,javascript,c#,datetime,Javascript,C#,Datetime,在服务器上,我使用Yahoo API获取货币 在结果中,我得到了Date和Time,并希望将其转换为DateTime对象,以便稍后将其转换为客户端的本地时间 我是用下面的方法做的 DateTime d = dateOnly.Add(timeOnly.TimeOfDay); 现在我想在客户端将其转换为本地时间(Javascript) 我在客户身上试过了 var d = new Date(d + " UTC"); alert(d.toString()); 编辑d值为2015-04-06T12:

在服务器上,我使用Yahoo API获取货币

在结果中,我得到了
Date
Time
,并希望将其转换为
DateTime
对象,以便稍后将其转换为客户端的本地时间

我是用下面的方法做的

DateTime d = dateOnly.Add(timeOnly.TimeOfDay);
现在我想在客户端将其转换为本地时间(Javascript)

我在客户身上试过了

var d = new Date(d + " UTC");
alert(d.toString());
编辑d值为
2015-04-06T12:32:00


但是获取错误
无效日期

请尝试此。。。我假设雅虎CSV是美国格式(m/d/yyyy)。。。如果没有,您需要确定如何在fixYahooDate中提取月份和日期

(function() {
    'use strict';

    String.prototype.pad = function(c, l) {
        return (new Array(l + 1).join(c) + this).substr(-l, l);
    };

    function fixYahooDate(aDate) {
        var match = /(\d?\d)\/(\d?\d)\/(\d+)/gi.exec(aDate);
        var m = match[1];
        var d = match[2];
        var y = match[3];    
        var sm = m.pad('0', 2);
        var sd = d.pad('0', 2);    
        var fixedDate = sm + "/" + sd + "/" + y;
        return fixedDate;
    }

    function fixYahooTime(aTime) {
        var match = /(\d?\d):(\d\d)(am|pm)/gi.exec(aTime);
        var h = match[1];
        var m = match[2];
        var a = match[3];
        var sh = h.pad('0', 2);
        var fixedTime = sh + ":" + m + ":00 " + a + " UTC";
        return fixedTime;
    }

    function YahooDateTimeToLocal(aDate, aTime) {
        var s = fixYahooDate(aDate) + " " + fixYahooTime(aTime);
        console.log(s);
        var dt = new Date(s);
        return dt;
    }

    var aDate = "4/6/2015";
    var aTime = "12:29pm";

    var localDt = YahooDateTimeToLocal(aDate, aTime);    
    console.log(localDt.toString());

}());

只需更改代码就可以正确地形成ISO 8601字符串

var d=新日期(d+“Z”);
Chrome调试控制台的屏幕截图:

或者,您可以通过确保
DateTime
值的
.Kind
设置为
DateTimeKind.Utc
来确保.NET代码添加了
Z

例如:

d=DateTime.SpecifyKind(d,DateTimeKind.Utc);
或者更好的是,您可以首先将其解析为UTC

string dateOnly=“4/6/2015”;
字符串timeOnly=“11:32pm”;
DateTime dt=DateTime.ParseExact(dateOnly+“”+timeOnly,
“M/d/yyyy h:mmtt”,
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);

这可能是最安全的方法。现在这种类型已经是UTC,并且
Z
已经就位。

看看Datetime.ParseWell什么是
数据[1]。结果中的Datetime
?您还没有告诉我们有关如何向客户端表示
DateTime
的任何信息……Jon,d是返回的结果,我已经修改了我的答案(它是一个DateTime对象),同样值得注意的是,特定的API似乎没有返回正确的值。我刚刚运行了它,它的时间比当前UTC时间提前了整整一个小时。我的猜测是,他们正在将本地时区转换为UTC,而不是在转换过程中考虑DST。