JavaScript的GETDATE返回错误的日期
-
21-09-2019 - |
题
下面的脚本返回20,而不是21!
var d = new Date("2010/03/21");
document.write(d.getDate());
我在做什么错了?这是一个JavaScript错误?
解决方案
在 Date.parse
方法实现相关(new Date(string)
等同于 Date.parse(string)
)。
虽然这种格式将可以在现代浏览器,你不能100%肯定的是,浏览器会解释正是你想要的格式。
我会建议你操纵你的字符串,并使用日期构造函数的年,月,日的参数:
// 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
}
其他提示
这是夏令时间的问题,因为日期()使用本地时间。
我住在巴西和Oct-21-2012是夏令大多数我国时间的开始,所以当地日期在OCT-21-2012之间0:0和1:0巴西不存在!
有人在这里评论,它的作品。这是因为对错小时回报依赖于本地用户的国家。
请参阅: http://www.timeanddate.com/news/时间/巴西-DST-2012.html
在巴西,在2012年的Java认为DST开始于OCT-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()
。
我也打不通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());
此,得到输出(火狐):
星期三2010年11月3日:3 UTC 4
铬是优良。因此,一些是在哪儿的 - 也许是一个错误,但更可能是时区/ UTC参数问题。想起在哪里PHP date()
将返回每天23小时,如果该时区的那一天改变等累垮如果我知道它是什么,但我。
我写了下面的代码在浏览器的地址栏和结果21
javascript:alert(new Date("2010/03/21").getDate())
有是一个Javascript错误没有这样的事情,因为有很多JavaScript实现,所以你要引用一个具体实施。
我测试实施是铬4.1.249。你叫什么名字?
有其在这里起着主要部分的时区。该Date()
功能将您的时区添加到您给作为输入的日期。例如:我给输入这样的:
alert(new Date("2018-09-15"));
对于我的结果是:<强>卫星2018年9月15日5时30分00秒GMT + 0530(印度标准时间)强>
30:在时区+05:30
添加到我输入的时间(你可以在上面看到result..05 00被添加到日期现在我要告诉是,如果你所在的时区不到0的国家,如巴西,墨西哥,智利等......其时区小于0]那么它会添加到您输入的日期(如:时区为UTC-05:00将减去-5:00日起给出。
VahidN ,则得到的结果20
因为你在的时区小于0(-1è :
00`等..)
的解决方案是重置时区到0 即可。就像这样:点击 日期( “2010-03-21T00:00:00”)
我在Firefox 3.6测试此代码和IE 8:
<script type="text/javascript">
var d = new Date("2010/03/21");
document.write(d.getDate());
</script>
它表示正确的日期:21
有关的更多信息,查看: javascript日期对象
您也可以阅读有关 JavaScript的兼容性考虑在Wikipedia 的。
http://jsbin.com/aqoki3/edit - 这里的代码,你贴我得到21
。所以它不是JS错误。也许它在浏览器中实现(JS的)错误。结果
所以正确初始化您的日期变种使用new Date(year, month, date [, hour, minute, second, millisecond ])
( HTTPS://developer.mozilla。组织/ EN / Core_JavaScript_1.5_Reference /对象/日期)。
这样,你一定会认为一天是21 becouse您隐其设置为21。
我得到firfox,野生动物园,铬,歌剧和IE同日(21), 是否我使用字符串“2010年3月21日”或整数日期参数(2010,2,21)。
我使用的Windows机器和浏览器的新版本 -
您可以测试,看看你的客户从字符串解析不同的日期, 这是我看到的问题的唯一地方。
if(new Date("2010/03/21")- new Date(2010,2,21)){
alert(new Date("2010/03/21"));
}
请确保您使用的数月为-1,如果您正在寻找在六月,你需要为一个月做的(6-1),建立在
var date_obj = new Date(y,(m-1),d);
当提供了新的日期的字符串日期,串需要包括时区,否则将被从浏览器不同的解释,以其他(由于不同的JavaScript实现),并从机到其它(由于本地时区的差异)
new Date('2017-07-31T10:00:00-0500');
代替
的
new Date('2017-07-31T10:00:00');
您cant't通过传递字符串参数创建日期对象是否显示像日期。
创建一个这样的方法。
var str_date = "2010/03/21";
var date = new Date();
var date_elements = str_date.split("/");
date.setYear(date_elements[0]);
date.setMonth(date_elements[1]);
date.setDay(date_elements[2]);
alert(date.toString);
给出date.toString
方法的关注。它返回完整的日期字符串。
date.getDate
只会给你的那一天的日子。
有关日期对象的详细信息,请参阅www.w3school.com