以下脚本返回 20 而不是 21!
var d = new Date("2010/03/21");
document.write(d.getDate());
我究竟做错了什么?这是一个 JavaScript 错误吗?
以下脚本返回 20 而不是 21!
var d = new Date("2010/03/21");
document.write(d.getDate());
我究竟做错了什么?这是一个 JavaScript 错误吗?
该Date.parse
方法依赖new Date(string)
于实现(相当于Date.parse(string)
)。
虽然这种格式将在现代浏览器上可用,但您不能 100% 确定浏览器会准确地解释您想要的格式。
我建议您操作字符串,并使用带有年、月和日参数的 Date 构造函数:
// parse a date in yyyy-mm-dd format
function parseDate(input) {
var parts = input.match(/(\d+)/g);
// new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}
这是一个夏令时问题,因为Date()使用本地时间。
我住在巴西,2012 年 10 月 21 日是我国大部分地区夏令时的开始,因此巴西不存在 2012 年 10 月 21 日 0:0 到 1:0 之间的本地日期!
有些人在这里评论说它有效。发生这种情况是因为正确或错误的返回时间取决于当地的用户国家/地区。
见:http : //www.timeanddate.com/news/time/brazil-dst-2012.html
在巴西,2012 年 Java 认为 DST 从 10 月 14 日开始(实际上是在 1 周后开始)
var dt = new Date(2012,9,14);
alert(dt.getHours());
产生1和
见:http : //www.timeanddate.com/time/dst/2013.html
解决方案是使用 UTC(协调世界时)时间,因为没有夏令时更改并且您使用一种抽象时间。在大多数实际应用中没有问题。
var dt = new Date( Date.UTC(2012, 9, 21, 8, 5, 12));
alert( (dt.getUTCMonth()+1) + '/' + dt.getUTCDate() + '/' +
dt.getUTCFullYear() + " " + dt.getUTCHours()+ ':' +
dt.getUTCMinutes() + ':' + dt.getUTCSeconds() );
如果有人不使用小时、分钟和秒,则更容易,只需放置一个大于或等于 1 的虚拟小时值,如我上面所示。
是否有可能将字符串参数视为 UTC 并将结果Date
对象视为本地时间,反之亦然?那可以扔掉它。比较d.getDate()
到d.getUTCDate()
。
时区在这里起着重要作用。该Date()
函数会将您的时区添加到您作为输入提供的日期中。例如:我给出了这样的输入:
alert(new Date("2018-09-15"));
我的结果是:
2018 年 9 月 15 日星期六 05:30:00 GMT+0530(印度标准时间)
时区+05:30
被添加到我输入的时间(你可以在上面的结果中看到..05:30:00 被添加到日期。现在我要说的是如果你在时区小于 0 [国家如巴西、墨西哥、智利等......时区小于 0] 然后它将添加到您的日期输入中(例如:时区是 UTC-05:00。它将从给定的日期中减去 -5:00。
VahidN,您得到结果20
是因为您所在的时区小于 0(-1è :
00` 等...)
解决方案是将您的时区重置为 0。像这样:
Date("2010-03-21T00:00:00").
我也得到了一天的偏差getDate()
,但我注意到它getUTCDate()
返回了预期值。该问题在 FF 3.6.12 中出现,但在 Chrome 上运行的相同代码没问题。
我的调试代码:
var date="2010-11-04";
alert(date);
var d = new Date(date)
alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());
这给出了一个输出(FireFox):
2010 年 11 月 3 日星期三:3 UTC 4
铬很好。所以某处出了点问题 - 可能是一个错误,但更可能是时区/UTC 参数问题。提醒我date()
如果当天时区发生变化等,PHP将在一天中返回 23 小时的位置。不过,如果我知道它是什么,那就麻烦了。