Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript到C获取以毫秒为单位的正确日期#_Javascript_C#_Momentjs - Fatal编程技术网

从Javascript到C获取以毫秒为单位的正确日期#

从Javascript到C获取以毫秒为单位的正确日期#,javascript,c#,momentjs,Javascript,C#,Momentjs,我使用矩将日期字符串转换为日期对象,然后获取该日期的毫秒数,并将其作为查询字符串传递给服务器 问题在于,当我尝试在C#中将javascript转换为DateTime时,从javascript中获得的毫秒数总是给我不同的日期 javascript function RedirectToOptions() { var iBranchId = $('#ddl_Branches').val(); var strDate = $('#txt_datepicker').val();

我使用矩将日期字符串转换为日期对象,然后获取该日期的毫秒数,并将其作为查询字符串传递给服务器 问题在于,当我尝试在C#中将javascript转换为DateTime时,从javascript中获得的毫秒数总是给我不同的日期

javascript

function RedirectToOptions() {
    var iBranchId = $('#ddl_Branches').val();
    var strDate = $('#txt_datepicker').val();
    var dtDate = moment(strDate);
    var iDate = dtDate.toDate().getTime();
    var capitalActionUrl = '@Html.Raw(@Url.Action("Revenue", new {BranchId = "_id_", DateTimeStamp = "_date_" }))';
    var branchCapitalUrl = capitalActionUrl.replace("_id_", iBranchId);
    var branchCapitalUrl = branchCapitalUrl.replace("_date_", iDate);
    window.location.replace(branchCapitalUrl);
}
C#


当我试图在转换时通过2016年1月5日(dd/MM/yyyy格式)时,由于某种原因,它会变成2016年1月4日

如果您使用的是历元,那么请确保您的所有时区都设置为UTC(并在之后转换为本地)。。。在Javascript中:

// ...
var dtDate = moment.utc(strDate);
// ...
在C#中:


如果您使用的是历元,那么请确保所有时区都设置为UTC(并在之后转换为本地)。。。在Javascript中:

// ...
var dtDate = moment.utc(strDate);
// ...
在C#中:


有一种更好的方法可以将日期对象传递给C#,那就是使用普通的ISO 8601标准格式(例如2016-01-01T12:00:00.568Z)。如果在日期上调用toJSON(),C#中的绑定器会自动将其转换为具有适当时区的C#datetime

您将能够在javascript中查看timzeone是否与毫秒不匹配,这比处理原始毫秒数更容易


您可以阅读更多信息。

有一种更好的方法将日期对象传递给C#,即使用普通ISO 8601标准格式(例如2016-01-01T12:00:00.568Z)。如果在日期上调用toJSON(),C#中的绑定器会自动将其转换为具有适当时区的C#datetime

您将能够在javascript中查看timzeone是否与毫秒不匹配,这比处理原始毫秒数更容易


您可以阅读更多信息。

首先,
typeof-iDate==“Nan”
将始终为
false
<代码>NaN的类型是
“数字”
。你要找的是
iDate=isNaN(iDate)?空:iDate“当我试图通过2016年1月5日(dd/MM/yyyy格式)转换时,由于某种原因,它变成了2016年1月4日”你是如何检查的?首先,
typeof iDate=='Nan'
将始终是
false
<代码>NaN的类型
“数字”
。你要找的是
iDate=isNaN(iDate)?空:iDate“当我试图通过2016年1月5日(dd/MM/yyyy格式)转换时,由于某种原因,它变成了2016年1月4日”你是如何检查的?在JavaScript方面,它完全不相关,事实上
时刻。utc(…)
可能有害。从
Date#getTime
获得的数字始终是从1970年1月1日午夜UTC开始的毫秒数。使用
moment.utc(…)
可能会给出错误的日期,因为我假设用户希望在本地时间进行解析。。然而,事情的C#端可能是有用的。我不认为这是OP的问题,但将纪元后的一毫秒转换为
日期时间
,他们肯定想从UTC
日期时间开始,很好地抓住了。@t.J.Crowder是的,但他是从一个字符串转换过来的,这个字符串可能在本地时间,而不是指定它是否在本地时间。。。在我的浏览器(UTC+2本地)中,
time(“2016-05-01”).toDate().getTime()
给出了
1462053600000
,而
time.UTC(“2016-05-01”).toDate().getTime()给出了
14620600000
。。。当转换回C#时,有足够的差异可以追溯到一天(几个小时,但由于epoch是在午夜,它会追溯到前一天),OP必须告诉我们他们是否要在本地解析它;我很肯定他们会的。但请注意,OP的区别不是一天,而是一个月。@t.J.Crowder哇,你说得对,我误解了。我敢打赌,他真的是指30-4,而不是1-4,但OP必须澄清,是的,我认为他/她只是在某个地方误读了月份值,0-based与1-based。在JavaScript方面,这完全无关,事实上
时刻。utc(…)
可能有害。从
Date#getTime
获得的数字始终是从1970年1月1日午夜UTC开始的毫秒数。使用
moment.utc(…)
可能会给出错误的日期,因为我假设用户希望在本地时间进行解析。。然而,事情的C#端可能是有用的。我不认为这是OP的问题,但将纪元后的一毫秒转换为
日期时间
,他们肯定想从UTC
日期时间开始,很好地抓住了。@t.J.Crowder是的,但他是从一个字符串转换过来的,这个字符串可能在本地时间,而不是指定它是否在本地时间。。。在我的浏览器(UTC+2本地)中,
time(“2016-05-01”).toDate().getTime()
给出了
1462053600000
,而
time.UTC(“2016-05-01”).toDate().getTime()给出了
14620600000
。。。当转换回C#时,有足够的差异可以追溯到一天(几个小时,但由于epoch是在午夜,它会追溯到前一天),OP必须告诉我们他们是否要在本地解析它;我很肯定他们会的。但请注意,OP的区别不是一天,而是一个月。@t.J.Crowder哇,你说得对,我误解了。我敢打赌,他的意思是30-4,而不是1-4,但OP必须澄清,是的,我认为他/她只是误读了某个地方的月份值,0-based与1-based。
// ...
var dtDate = moment.utc(strDate);
// ...
// ...
DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
// ...