我正在制作一个像 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/