javascript日期对象更改

javascript date object changes

本文关键字:对象 日期 javascript      更新时间:2023-09-26

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

2012,03,13,01,31,38

我想从中创建一个js日期对象,所以…

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

很简单,对吧?但它以的形式回来了

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

因此,本月1日放假,时间4小时(可能是夏令时或时区相关??)。我只是想要一个与我提供的日期相匹配的日期。处理这些JS日期对象让我抓狂。

我如何才能确保日期对象与字符串显示的日期和时间完全相同,我不需要更改时区或夏令时,只需要一个与字符串匹配的日期。

有关应用程序的更多细节:我的应用程序是为了满足这个需求,我正在Titanium中开发一个iphone应用程序(它使用JS构建)。基本上,我的应用程序的一部分涉及记录数据,我用这些日志收集设备的当前日期和时间。我将所有这些信息保存到mySQL数据库中。数据库中的字段格式如下:"2012-02-16 00:12:32"

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

如果这让人感到困惑,我很抱歉。我很难弄清楚整个约会的事情。

这取决于您的字符串是什么。如果该字符串是UTC时间,则需要将其解析为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:

  • http://jsfiddle.net/rNqXW/

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

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

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