javascript getDay()在美国返回错误的日期,但在印度返回正确的值
javascript getDay() returns wrong number for a date in america but it returns correct value in india
我试图使用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(星期日)。
谁能告诉我为什么会这样?我不知道我哪里做错了。Date构造函数使用UTC创建一个实例,UTC与印度和美国的本地时间都不同。你可以通过比较
来检查d.toLocaleString()
和
d.toUTCString()
那么,你可能需要的是
d.getUTCDay()
在所有时区返回相同的结果。
有两个问题:
将字符串传递给Date构造函数调用Date。解析,它在很大程度上依赖于实现,即使对于标准化的部分,也会因浏览器而异。
没有时区的ISO 8601日期在ES5中被指定为UTC,然而一些浏览器将它们视为本地
(ES6将改变这一点,因此它们应该被视为本地)。
所以如果你想要一致的日期,写你自己的解析器来把字符串转换成日期。假设您希望没有时区的字符串是本地的,因此:
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日。
:
parseISODate('2014-05-26').getDay() // 1
无处不在。
如果您知道日期字符串始终有效并且不关心年份1到99,则可以使用没有上述内容的简单版本(即不验证日期值并将年份(例如0005)转换为1905):
function parseISODate(s) {
var b = s.split(/'D/);
return new Date(b[0], --b[1], b[2]);
}
try this,
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并测试此代码
相关文章:
- "日期“;AJAX请求返回的类型值未定义
- 将客户端特定的日期格式返回到服务器MVC4
- JQuery UI日期选择器:在选择出发日期时自动弹出返回日期
- 它将返回什么新日期(DateObject)
- 对象数组返回自最近日期以来的最高总体值
- 从Parse.com返回的格式化日期
- PHP strtotime()为JavaScript日期字符串返回false
- date对象未在javascript中返回正确的日期值
- 下周末'javascript中的s datetime返回无效日期
- 返回日期的外部 JavaScript
- 本地日期转换为 UTC 纪元时间并在 JavaScript 中返回日期时不匹配
- 如何使用 JQuery DatePicker 以 YYYYMMDD 格式返回日期
- 从使用时间字符串创建的momentjs对象返回日期对象或字符串
- 返回日期/时间函数中的日期和月份名称
- 为什么我的对象不返回日期?
- javascript new Date(timestamp)是否根据客户端的时区返回日期?
- 使用Javascript解析并返回日期的组件
- JSONArray返回日期作为对象
- 当我试图从输入字段返回日期值时,我得到了未定义
- 日期时间选取器以日期时间格式而不是时间戳的形式返回日期