从日/月/年JavaScript创建新Date对象的错误?

时间:2015-06-10 07:24:47

标签: javascript date

一个非常简单的问题。我有三个数字,一年,一个月和一天。

var year = parseInt($("#date_year").val());
var month = parseInt($("#date_month").val()) - 1; // to start from 0
var day = parseInt($("#date_day").val());

我想在JS中使用这些值初始化一个正确的Date对象。我试过这个:

var date = new Date(year, month, day);

然而,它表现得很奇怪,一天不正确,时间也不是00:00:00,例如对于价值观:

year: 1987
month: 9
day: 28
打印后{p> date.toUTCString()我得到了:

Tue, 27 Oct 1987 23:00:00 GMT

我期待的时候:

Wed, 28 Oct 1987 00:00:00 GMT

任何人都可以指出,我不能正确理解吗?

4 个答案:

答案 0 :(得分:1)

使用此:

date.toString();

toUTCString()方法使用UTC时区将日期转换为字符串。

toString()方法返回表示指定Date对象的字符串(不转换日期)。

答案 1 :(得分:1)

这是由于时区的不同。

toUTCString():根据通用时间将Date对象转换为字符串。

答案 2 :(得分:1)

使用date.toString()代替date.toUTCString()

date.toString()返回"Wed Oct 28 1987 00:00:00 GMT+0800 (Malay Peninsula Standard Time)"

如果您需要它返回"Wed, 28 Oct 1987 00:00:00 GMT",可以试试这个:

var date = new Date(year, month, day);
dateString = date.toString();
dateString = dateString.split("+")[0];
dateString = dateString.replace(" ", ", "); // replace first space with comma + space

这会使dateString = "Wed, Oct 28 1987 00:00:00 GMT"

答案 3 :(得分:1)

Date对象的参数获取运行时间区域,然后将其转换并存储为1970年1月1日UTC之后的毫秒数。

所以这个:

var date = new Date(1987, 9, 28);

  • 上面说的是时区偏移+0800(马尼拉)
  • 1987年10月28日00:00:00 GMT + 0800"
  • 通过减去偏移量
  • 将其转换为UTC
  • 然后存储为562348800000或" 1987-10-27T16:00:00.000Z"

这样做是因为网站遍布全球,并且可以让浏览器根据其所在的本地时区更轻松地显示时间,并将对象存储在公共参考框架中,在这种情况下是UTC。

您可以使用:

date.toString()

这将以运行时间区域中日期的美式英语表示形式显示Date对象。或者:

date.toLocaleString()

您可以指明区域设置,甚至是您想要显示的区域。Check compatibility