MVC Javascript日期时间
我一直在开发一个新的网站,遇到了一个奇怪的日期时间问题,我似乎无法找出问题所在 我的暂存服务器在这里: 如你所见,人们可以“现在”或“将来”查询出租车 应该发生的是,如果你选择了“未来”,并提前2个多小时输入日期/时间,那么我将能够为你提供出租车的实时报价。如果提前交付时间少于2小时,则不应看到任何“实时”报价 我正在基于芬兰一家公司的API开发它,他们也在测试它 芬兰的家伙们报告说,即使他们选择了“现在”,他们仍然会得到不应该得到的现场报价 我使用一些JavaScript填充页面上的日期时间选择器,如下所示:MVC Javascript日期时间,javascript,jquery,asp.net-mvc,Javascript,Jquery,Asp.net Mvc,我一直在开发一个新的网站,遇到了一个奇怪的日期时间问题,我似乎无法找出问题所在 我的暂存服务器在这里: 如你所见,人们可以“现在”或“将来”查询出租车 应该发生的是,如果你选择了“未来”,并提前2个多小时输入日期/时间,那么我将能够为你提供出租车的实时报价。如果提前交付时间少于2小时,则不应看到任何“实时”报价 我正在基于芬兰一家公司的API开发它,他们也在测试它 芬兰的家伙们报告说,即使他们选择了“现在”,他们仍然会得到不应该得到的现场报价 我使用一些JavaScript填充页面上的日期时间选
var d = new Date();
var curr_hour = d.getHours(); // this is in 24 hour
var curr_minute = d.getMinutes();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
if (curr_minute < 15) { $("#enquiry_timeMins").val(15); }
if (curr_minute >= 15 && curr_minute < 30) { $("#enquiry_timeMins").val(30); }
if (curr_minute >= 30 && curr_minute < 45) { $("#enquiry_timeMins").val(45); }
if (curr_minute >= 45 && curr_minute < 59) { $("#enquiry_timeMins").val(00); curr_hour = curr_hour + 1; }
if (curr_hour >= 12) {
$("#enquiry_timeAMPM").val("PM");
$("#enquiry_timeHours").val(curr_hour - 12);
}
else {
$("#enquiry_timeAMPM").val("AM");
$("#enquiry_timeHours").val(curr_hour);
}
$("#enquiry_pickupTime").val(curr_date + "/" + curr_month + "/" + curr_year);
// at this point theRoute.enquiry.pickupTime is a null DateTime
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(theRoute.enquiry.timeHours);
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddMinutes(theRoute.enquiry.timeMins);
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddMinutes(theRoute.enquiry.timeMinsOffset);
if (theRoute.enquiry.timeAMPM == "PM") { theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(12); }
这对我来说似乎非常有效,但我的总部在英国。芬兰的小伙子们也恰好提前了两个小时。这似乎不仅仅是巧合,因为交付周期也提前了2个小时
有人能看到我没有考虑过的在英国但在芬兰不起作用的东西吗?可能还有其他国家吗?猜你的theRoute.Inquiry.pickupTime是在另一个时区创建的。好的。我想我已经修好了 这就是我所做的 我计算出我需要知道浏览器时间前后的小时数,以便我可以随后计算出我需要向前/向后移动查询时间的多少 我发现以下要点可以帮助我计算出时间差和日光节约时间:
function getTimeZoneOffsetDST() {
// NOTE: return new Date().getTimezoneOffset() is not enought !
var today = new Date();
// 2nd Sunday in March can't occur after the 14th :
var dstBeg = new Date("March 14, " + today.getFullYear() + " 02:00:00");
// 1st Sunday in November can't occur after the 7th :
var dstEnd = new Date("November 07, " + today.getFullYear() + " 02:00:00");
dstBeg.setDate(14 - dstBeg.getDay()); // Calculate second Sunday in March
dstEnd.setDate(7 - dstEnd.getDay()); // Calculate first Sunday in November
if (today >= dstBeg && today < dstEnd) { // isDST
// e.g. for GMT+02:00 returns -120 !
return today.getTimezoneOffset() + 60;
}
else {
return today.getTimezoneOffset();
}
}
填充以下内容:
@Html.HiddenFor(model2 => Model.enquiry.timeMinsOffset, new { id = "timeMinsOffset" })
回到控制器中,我现在只需添加偏移时间,如下所示:
var d = new Date();
var curr_hour = d.getHours(); // this is in 24 hour
var curr_minute = d.getMinutes();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
if (curr_minute < 15) { $("#enquiry_timeMins").val(15); }
if (curr_minute >= 15 && curr_minute < 30) { $("#enquiry_timeMins").val(30); }
if (curr_minute >= 30 && curr_minute < 45) { $("#enquiry_timeMins").val(45); }
if (curr_minute >= 45 && curr_minute < 59) { $("#enquiry_timeMins").val(00); curr_hour = curr_hour + 1; }
if (curr_hour >= 12) {
$("#enquiry_timeAMPM").val("PM");
$("#enquiry_timeHours").val(curr_hour - 12);
}
else {
$("#enquiry_timeAMPM").val("AM");
$("#enquiry_timeHours").val(curr_hour);
}
$("#enquiry_pickupTime").val(curr_date + "/" + curr_month + "/" + curr_year);
// at this point theRoute.enquiry.pickupTime is a null DateTime
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(theRoute.enquiry.timeHours);
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddMinutes(theRoute.enquiry.timeMins);
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddMinutes(theRoute.enquiry.timeMinsOffset);
if (theRoute.enquiry.timeAMPM == "PM") { theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(12); }
显然现在我回头看。新手,嗯
希望这对其他人有帮助 服务器端代码是否会在您的服务器时区执行,而JavaScript将在浏览器的时区执行,即芬兰?@Liam感谢您的回复。但我认为这不是答案。。服务器端代码不根据服务器日期执行任何操作-它只是将小时和分钟的值添加到日期选择器中的日期中…我也不认为这是问题所在。theRoute.Inquiry.pickupTime为null,并由通过响应发送的值填充。。。