Javascript新的日期日期转换

时间:2012-10-30 03:17:07

标签: javascript date

我有一个带有日期的mysql表(格式:yyy-mm-dd)。然后我检索日期并保存它们,但是在采购中我更改日期格式以使用户更容易查看手头的任务。我的问题是,当我得到未来太远的日期(几个月)时,他们会改变并落后一天(否则它可以正常工作)。我花了很多时间阅读javascript日期转换的工作方式,但我仍然没有完全理解。没有我写的日期总是在转换一天后进入。我也位于俄亥俄州。这就是我所拥有的:

    var x = offset*60000;  
    var time = new Date (item.start);
    var time2=time.getTime();
    var time3=time2+x;
    var start = $.datepicker.formatDate('D, d M, yy', new Date (time3));

这里有什么问题?如果你能给我的教育快速解释,那将是很好的。感谢。

2 个答案:

答案 0 :(得分:2)

问题是,根据 - https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date (即ISO8601扩展格式的版本),传递给Date构造函数的格式似乎无效。有效的ES5 format,但浏览器未正确解析。

所以这样的事情应该是你所需要的:

http://jsfiddle.net/xfz6L/

var date_string = "2012-11-02";

var first_try = new Date(date_string);
alert(first_try.toDateString());

// The following is the code you would use
var date_split = date_string.split("-");
var second_try = new Date(date_split[0], +date_split[1]-1, date_split[2]);
alert(second_try.toDateString());

由于问题似乎是它不是一个有效的格式并非所有浏览器都正确解析ISO8601格式,我的解决方案是使用提供的字符串并操纵它作为有效的构造函数。

我能想到的最简单的方法是将“年”,“月”和“日”按顺序传递给构造函数。

为此,您需要将字符串拆分为-,然后将每个数组索引传递给构造函数。

我从月中减去“1”的原因是范围从0到11。

答案 1 :(得分:0)

请注意,yyyy-mm-dd格式是有效的ISO date,但遗憾的是,JavaScript Date constructor仅支持自纪元以来的毫秒数,RFC 2822 date或单独的日期组件。< / p>

在这种情况下,使用日期组件可能最简单:

function parseDate(isoDateStr) {
  var parts = isoDateStr.split(/-/);
  return new Date(parts[0], parts[1]-1, parts[2]);
}

请注意,月份值从零开始,而不是从一开始。