首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC Javascript DateTime

MVC Javascript DateTime
EN

Stack Overflow用户
提问于 2013-05-21 16:30:40
回答 2查看 270关注 0票数 0

我一直在开发一个新的网站,并遇到了一个奇怪的日期问题,我似乎不知道什么是错的。

我的暂存服务器在这里:链接

正如你所看到的,人们可以询问出租车“现在”或“未来”。

应该发生的是,如果你选择“未来”,并将一个日期/时间超过2小时,那么我将能够给你的出租车现场报价。如果提前不到2小时,那么您就不应该看到任何“实时”引号。

我是基于芬兰一家公司的API开发的,他们也一直在测试它。

芬兰的人报告说,即使他们选择了“现在”,他们仍然得到现场引文,而他们不应该。

我使用一些JavaScript来填充页面上的日期时间选择器,如下所示:

代码语言: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);

然后在我的控制器里我这样做:

代码语言:javascript
复制
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(theRoute.enquiry.timeHours);
theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddMinutes(theRoute.enquiry.timeMins);
if (theRoute.enquiry.timeAMPM == "PM") { theRoute.enquiry.pickupTime = theRoute.enquiry.pickupTime.AddHours(12); }

这似乎很适合我,但我的总部在英国。芬兰的球员们也恰好提前了2个小时。这似乎不仅仅是巧合,因为提前了两个小时。

有人能看到我没有想到的在英国,但在芬兰,可能还有其他国家成功的东西吗?

EN

回答 2

Stack Overflow用户

发布于 2013-05-21 20:30:13

猜测您的theRoute.enquiry.pickupTime是在另一个时区创建的。

票数 0
EN

Stack Overflow用户

发布于 2013-05-22 18:03:37

好的。我想我已经修好了..。

这就是我所做的。

我计算出,我需要知道浏览器时间后面或前面的时间是多少,这样我就可以计算出我需要多少时间向前/向后移动询问时间。

我发现这个要点可以帮助我计算出时间差异以及节省日照的时间:

代码语言:javascript
复制
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();
    }
}

有点像这样的jquery

代码语言:javascript
复制
$("#timeMinsOffset").val(getTimeZoneOffsetDST());

填充以下内容:

代码语言:javascript
复制
@Html.HiddenFor(model2 => Model.enquiry.timeMinsOffset, new { id = "timeMinsOffset" })

回到控制器中,我现在只需添加偏移时间,如下所示:

代码语言:javascript
复制
// 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); }

很明显我现在回头看。新来的嗯?

希望这能帮到其他人!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16674986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档