1

我有一个带有日期的 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));

这里有什么问题?另外,如果您能对我的教育做出快速解释,那就太好了。谢谢。

4

2 回答 2

2

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

所以像这样的东西应该是你需要的:

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。

于 2012-10-30T03:30:02.943 回答
0

请注意,yyyy-mm-dd格式是有效的ISO 日期,但不幸的是,JavaScriptDate构造函数仅支持自纪元以来的毫秒值、RFC 2822 日期或单独的日期组件。

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

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

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

于 2012-10-30T03:51:51.493 回答