我一直在阅读几天的日期,似乎在这里围成一圈。我在数据库中有一个字符串,看起来像这样
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时,它只是上面的字符串,根据用户请求进行修改。无论是在宾夕法尼亚州还是在中国进行编辑都无关紧要,他们正在编辑相同的日志日期。
很抱歉,如果这令人困惑。我很难搞清楚这整个日期的事情。
答案 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)
我遇到了同样的问题。奇怪的时间变化有两个原因:
new Date(Date.UTC(2012,03,13,01,31,38))
来避免时间变化。