JavaScript的getDate返回错误的date
以下脚本返回20而不是21!
var d = new Date("2010/03/21"); document.write(d.getDate());
我究竟做错了什么? 这是一个JavaScript错误?
Date.parse
方法依赖于实现( new Date(string)
等同于Date.parse(string)
)。
虽然这种格式将在现代浏览器上可用,但您不能100%确定浏览器会正确解释您所需的格式。
我build议你操纵你的string,并使用Date,month和day参数的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日是我国大部分地区的夏令时开始,因此0 – 0 – 1 – 0之间的0 – 0 – 1 – 0当地date在巴西不存在!
有些人在这里评论说,它的工作。 发生这种情况是因为正确或错误的小时回报取决于当地的用户国家。
请参阅: 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
解决scheme是使用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的虚拟小时值就更容易了,如上所示。
有没有机会将string参数视为UTC并将生成的Date
对象视为本地时间,反之亦然? 这可能会把它扔掉。 将d.getDate()
与d.getUTCDate()
进行比较。
我也通过getDate()得到1天的偏差,但是我注意到getUTCDate()返回期望的值。 问题出现在FF 3.6.12,但在Chrome上运行相同的代码是好的。
我的debugging代码:
var date="2010-11-04"; alert(date); var d = new Date(date) alert(d.toDateString()+": "+ d.getDate()+" UTC "+d.getUTCDate());
这给了一个输出(FireFox):
Wed Nov 03 2010:3 UTC 4
Chrome很好。 所以有些地方可能会出现问题 – 可能是一个错误,但更可能是时区/ UTC参数问题。 提醒我PHP date()将在一天中返回23小时,如果时区改变那一天等等。
我在浏览器的地址栏中写了下面的代码,结果是21
javascript:alert(new Date("2010/03/21").getDate())
有没有这样的事情作为一个Javascript的错误,因为有很多的Javascript实现,所以你要参考一个具体的实现。
我testing的实现是Chrome 4.1.249。 你的是啥呢?
我在Firefox 3.6和IE 8中testing了这个代码:
<script type="text/javascript"> var d = new Date("2010/03/21"); document.write(d.getDate()); </script>
这是显示正确的date:21
有关更多信息,请参阅: JavaScript Date对象
您也可以阅读维基百科的JavaScript兼容性考虑事项 。
http://jsbin.com/aqoki3/edit – 这里有你发布的代码,我得到21
。 所以它不是JS错误。 也许它在您的浏览器实现(JS)的错误。
所以要正确地初始化你的datevar使用new Date(year, month, date [, hour, minute, second, millisecond ])
( https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Date )。 这样你就可以肯定那一天是21,因为你隐含地把它设置为21。
我在firfox,safari,chrome,opera和IE中得到了相同的date(21),无论是使用string“2010/03/21”还是整数date参数(2010,2,21)。
我正在使用Windows机器和新版本的浏览器 –
你可以testing一下,看你的客户端是否parsing了string中的不同date,这是我看到的唯一一个问题。
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);
当给新的date一个stringdate时,string需要包括时区,否则将被解释为从不同的浏览器到其他(由于不同的JavaScript实现),从机器到其他(由于本地时区的差异)
new Date('2017-07-31T10:00:00-0500');
你不能通过像date那样传递string参数来创buildDate对象。
像这样创build。
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
方法。 它返回完整的datestring。 date.getDate
只会给你那天的一天。
有关Date对象的更多信息,请参阅www.w3school.com