javascript日期对象更改

标签 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 小时(可能与夏令时或时区有关???)。我只是想要一个与我提供的日期相匹配的日期。处理这些 JS 日期对象让我抓狂。

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

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

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

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

最佳答案

这取决于你的字符串是什么。如果该字符串是 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:

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

关于javascript日期对象更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9338411/

相关文章:

javascript - jQuery 在特定 id 的元素中添加具有属性的新 DOM 元素

javascript - 编译 Angular 6 项目时出现错误

Javascript隐藏过滤器子innerhtml

javascript - 仅在单击链接时执行一些 XSLT

javascript - AngularJS $http.get 无法与 Node.js RESTful 一起使用

javascript - 将 javascript 日期对象设置为 30 天之前

java - 如何在 Android 上制作日期微调器

date - 如何在 Haskell 中将日期转换为 Int

php - 如何获取上月和下月?

java - 查找日期差异