JavaScript 日期还差 5 小时

标签 javascript

我正在制作一个像 PHP 那样的 JavaScript mkDate 函数,并且我已经让它给出了正确的日期,但它比预期的时间少了 5 个小时。我已经盯着这个看了一个小时了。这是我的代码:

function mkDate(hour, minute, second, month, day, year)
{
    month--;

    var monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    if(new Date(year, 1, 29, 0, 0).getMonth() != 2) { monthDays[1] = 29; }

    var years = year - 1970;
    var leapYears = parseInt((year - 1972)/4);

    var days = (years - leapYears) * 365;
    days += leapYears * 366;

    for(var i = 0; i < month; i++) {
            days += monthDays[i];
    }

    days += day;

    var time = days * 60 * 60 * 24 * 1000;
    time += hour * 60 * 60 * 1000;
    time += minute * 60 * 1000;
    time += second * 1000;

    var tDate = new Date();
    tDate.setTime(time);
    return tDate;
}

var myDate = mkDate(16, 38, 23, 7, 10, 2013);

// myDate should be Wednesday, July 10, 2013 04:38:23 PM
// but myDate is coming up with Wednesday, July 10, 2013 11:38:23 AM

最佳答案

时区问题:settime takes milliseconds since midnight 01 January, 1970 UTC as an argument ,然后你在本地时间给它喂食。您现在处于 CDT,比 UTC 晚 5 小时。

现在,Date has a constructor which takes exactly the fields you're feeding mkDate (但以另一个顺序),所以你的功能可以减少到

function mkDate(hour, minute, second, month, day, year)
{
    return new Date(year,month-1,day,hour, minute, second);
}

该日期将为本地时间。

编辑:我错过了月份字段上的 1 减法 - Java 和 Javascript 至少有一个共同的错误......

关于JavaScript 日期还差 5 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17626060/

相关文章:

javascript - 在javascript数组中插入项目并排序

javascript - FullCalendar dayRender 显示下几天的日期?

javascript - coffeescript,jquery中的每个循环

javascript - 动态:CSS 与 JavaScript

javascript - 将 Adob​​e DTM 中的值数组分配给列表变量

javascript - 有没有办法为进度条添加刷新持久性?

javascript - 动态地将 .on() 方法与事件映射绑定(bind)

javascript - Angular - $cookies 未定义

javascript - 关闭弹出窗口时可以刷新父窗口吗?

javascript - 使用 Flickity 在下一张幻灯片上暂停 YouTube 视频