javascript日期对象更改

时间:2012-02-18 04:02:26

标签: javascript date

我一直在阅读几天的日期,似乎在这里围成一圈。我在数据库中有一个字符串,看起来像这样

2012,03,13,01,31,38

我想从中创建一个js日期对象......

new Date(2012,03,13,01,31,38);

够简单吧?但它回来了

2012-04-13 05:31:38 +0000

因此月份关闭1,时间关闭4小时(可能是DST或时区相关???)。我只想要一个与我提供的日期相匹配的日期。它让我疯狂,处理这些JS日期对象。

我怎样才能确定日期对象与字符串建议的日期和时间完全相同,我不需要更改时区或DST,只需要一个匹配字符串的日期。

有关申请的更多细节: 我需要的应用程序是我在Titanium中开发的iphone应用程序(使用JS构建)。基本上,我的应用程序的一部分涉及记录数据,并使用该日志收集设备的当前日期和时间。我将所有这些信息保存到mySQL数据库中。数据库中的字段看起来像这样的格式:“2012-02-16 00:12:32”

这是我开始遇到问题的地方。我现在提供编辑日志的功能,包括记录的日期和时间。为了使用iPhone“选择器”,我必须再次将上面的字符串转换为JS日期对象。这通常会给我带来麻烦。我基本上需要使用上面的日期创建一个新的日期对象,时区和dst完全不相关,这样当我保存回DB时,它只是上面的字符串,根据用户请求进行修改。无论是在宾夕法尼亚州还是在中国进行编辑都无关紧要,他们正在编辑相同的日志日期。

很抱歉,如果这令人困惑。我很难搞清楚这整个日期的事情。

2 个答案:

答案 0 :(得分:2)

这取决于你的字符串是什么。如果该字符串是UTC时间,则需要将其解析为该时间。如果是本地时间,则需要将其解析为本地时间。您可以为该部分制作这样的辅助方法:

function getDate(utc, year, month, day, hour, minute, second) {
  if(utc) {
    var utc = Date.UTC(year, month - 1, day, hour, minute, second);
    return new Date(utc);
  } else {      
    return new Date(year, month - 1, day, hour, minute, second);
  }
}

现在,要解析你的字符串,你可以使用它:

function fromString(utc, str) {
  var parts = str.split(',');

  var year = parts[0];
  var month = parts[1];
  var day = parts[2];
  var hour = parts[3];
  var minute = parts[4];
  var second = parts[5];

  return getDate(utc, year, month, day, hour, minute, second);
}

你可以像这样使用你的例子:

var d = fromString(true, '2012,02,13,00,31,38'); // If UTC
var d = fromString(false, '2012,02,13,00,31,38'); // If local time

这是一个可以玩的jsFiddle:

还显示了两种打印日期(UTC或本地)的方法。希望这会有所帮助。

答案 1 :(得分:0)

我遇到了同样的问题。奇怪的时间变化有两个原因:

  1. 使用new Date(Date.UTC(2012,03,13,01,31,38))来避免时间变化。
  2. 请注意月份为零!此功能的月份从0到11。