我不确定我在这里做错了什么。但如果有人可以帮助我,那就太好了。
我已经对日期字符串进行了硬编码,并且我正在尝试创建一个javascript日期对象。从新创建的javascript日期对象创建字符串后,我注意到日期对象不正确。但字符串很好。
var str = '2014-06-24'; // hard coded string yyyy-mm-dd
var new_day = new Date(str);
var date_string = new_day.getFullYear()+"-"+(new_day.getMonth()+1)+"-"+(new_day.getDate()+1);
alert('these are supposed to match: '+ date_string+" \n"+new_day);
关于js日期对象,我有什么遗漏吗?救命。 fiddle example提前感谢您的帮助
答案 0 :(得分:2)
我正在写第二个答案。我的第一个错了。
According to MDN,你真的不应该使用dateString作为构造函数参数来设置你的日期“由于浏览器的差异和不一致”。话虽如此,由于时区差异,您也遇到了重大问题。在您的示例中,您具有以下结果(在chrome和CDT时区中):
这些应该匹配:2014-6-24
2014年6月23日星期一19:00:00 GMT-0500(CDT)
但如果你注意到,那就是一样的。如果用户处于CDT时区,由于时区差异,2014-6-24
减去5小时。这导致Jun 23 2014 19:00:00
位。如果您的原始日期2014-6-24
确实没有时区,则应将日期对象实例化为UTC日期对象。
var new_day = new Date(Date.UTC(2014,05,24)); /* month adjusted for zero-based index */
var date_string = new_day.getUTCFullYear()+"-"+(new_day.getUTCMonth()+1)+"-"+(new_day.getUTCDate());
alert('these are supposed to match: '+ date_string+" \n"+new_day.toUTCString());
这个和我删除的答案之间的巨大差异是你可以在2014-06-24 20:00
的第一个答案中设置日期字符串,这会导致错误的时间。此代码不会出现此问题。使用上面的示例,Date.UTC(2014,05,24,20)
不会导致打印值的25th
日期。
如果您相对确定日期格式不会更改,则可以添加快速适配器以将正确的参数传递给UTC方法。
var str = '2014-06-24'; // hard coded string yyyy-mm-dd
str = str.split('-'); // split into an array [2014,06,24]
str[1]--; // month (second array item) adjusted for zero-based index
var dateTime = Date.UTC.apply(null, str); /* formatted as an integer to represent
the UTC date of 2014-06-24. I use apply
so I can pass the arguments as an array
like object. */
var new_day = new Date(dateTime);
var date_string = new_day.getUTCFullYear()+"-"+(new_day.getUTCMonth()+1)+"-"+(new_day.getUTCDate());
alert('these are supposed to match: '+ date_string+" \n"+new_day.toUTCString());