javascript getDay()在美国返回错误的日期数字,但在印度返回正确的值
我试图使用javascript getDay()获取星期天的名称。我知道getDay()方法返回一周中的某一天,比如:0是星期天,1是星期一等等javascript getDay()在美国返回错误的日期数字,但在印度返回正确的值,javascript,Javascript,我试图使用javascript getDay()获取星期天的名称。我知道getDay()方法返回一周中的某一天,比如:0是星期天,1是星期一等等 var d=new Date("2014-05-26"); //this should return 1 so weekname monday. alert(d.getDay()); // in india it returns correct value 1 fine. 但当我在美国检查这段代码时,它返回了错误的数字0(星期日) 谁能告诉我为什么会
var d=new Date("2014-05-26"); //this should return 1 so weekname monday.
alert(d.getDay()); // in india it returns correct value 1 fine.
但当我在美国检查这段代码时,它返回了错误的数字0(星期日)
谁能告诉我为什么会发生这种事??我不知道我哪里做错了
提前感谢。日期构造函数使用UTC创建实例,这与印度和美国的当地时间不同。你可以通过比较来检查
d.toLocaleString()
及
所以,你可能需要的是
d.getUTCDay()
对所有时区返回相同的结果。试试这个
var d=new Date("2014-05-26"); //this should return 1 so weekname monday.
var newDate = Date.UTC( d.getFullYear(), d.getMonth(), d.getDate());
alert(newDate.getDay()); // in india it returns correct value 1 fine.
您可以通过更改系统日期时区更改来产生相同的问题。将其设置为UTC-5/4/3或UCT+5/4/3并测试此代码您有两个问题:
function parseISODate(s) {
var b = s.split(/\D/);
var d = new Date();
d.setHours(0,0,0,0);
d.setFullYear(b[0], --b[1], b[2]);
return d.getFullYear() == b[0] && d.getDate() == b[2]? d : NaN;
}
上面的函数需要一个不带时区的ISO 8601格式的日期,并将其转换为本地日期。如果日期值超出范围(如2014-02-29),则返回NaN(根据ES5)。它还纪念两位数的年份,以便0005-10-26
0005年10月26日
以及:
到处都是
如果您知道日期字符串始终有效且不关心年份1到99,则可以使用不包含上述内容的简化版本(即不验证日期值,并将0005年变为1905年):
function parseISODate(s) {
var b = s.split(/\D/);
return new Date(b[0], --b[1], b[2]);
}
您是每次获得0(星期日)还是获得+/-1天的印度日期和时间time@Rachit你说得对。总是得到+/-1天的印度日期,这取决于你使用的浏览器。解析日期字符串不应留给日期构造函数(即)。如果2016-02-29是有效的,并且返回了错误的日期,该怎么办?@Grumpy,这不应该发生。此答案将字符串视为本地字符串。自编写以来,TC39的成员决定ISO 8601的日期没有时区,而不是本地日期(这与ISO 8601和标准的推断相反)。这又回到了建议,即您应该始终手动解析日期字符串,以便了解如何解释它们。
parseISODate('2014-05-26').getDay() // 1
function parseISODate(s) {
var b = s.split(/\D/);
return new Date(b[0], --b[1], b[2]);
}