下面的脚本返回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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top