为什么使用新 Date() 时给定日期会变成前一天
Why a given date turns into a day before when using new Date()?
给定的日期是2016-02-04
.那应该是2016年2月4日。但是当我使用 new Date()
时,它返回为 Wed Feb 03 2016 16:00:00 GMT-0800 (PST)
而不是 Thu Feb 04...
。
以下是我所做的一切:
var _entryDate = new Date("2016-02-04");
console.log(_entryDate); // Wed Feb 03 2016 16:00:00 GMT-0800 (PST)
为什么会发生这种情况,我如何获得我想要的结果,即 2 月 4 日而不是前一天?
的格式被解释为 UTC 日期,因此假定西欧的时间是午夜。 这比你提前了 8 个小时。
您可以通过将T00:00-0800
附加到日期字符串来强制解释时区。对于您来说,自己分析日期并使用数字年、月和日期参数构造 Date 实例可能更可靠。
var dateArray = "2016-02-04".split("-");
var year = dateArray[0];
var month = parseInt(dateArray[1], 10) - 1;
var date = dateArray[2];
var _entryDate = new Date(year, month, date);
alert(_entryDate);
按照@RobG的建议删除了不必要的month
和year
parseInt
而且我不知道 Pointy 指向什么(如无知)。我从不 已知日期构造函数将回退到 UTC,具体取决于 字符串已传递。 这样,Date 构造函数将始终使用本地时区构建 Date。 无论如何,使用带有数字参数的日期构造函数总是好的。
Javascript Date
对象也包含时间。如果创建一个没有时间组件的,则默认为午夜。
问题是,午夜在哪个时区? 如果要从字符串中解析日期,则在 ECMAScript 定义中未指定该字符串;这取决于实施。但大多数实现选择世界时 - 这意味着所表示的时刻落在伦敦以西和国际日期变更线以东的任何位置的前一天。
如果您从数字创建日期而不是解析字符串,则将其指定为本地时间,无论 Javascript 认为它位于哪个时区。 例如,在美国/东部("EST")中:
new Date('2016-02-04')
//=> Wed Feb 03 2016 19:00:00 GMT-0500 (EST) - midnight UTC
new Date(2016,2,4)
//=> Fri Mar 04 2016 00:00:00 GMT-0500 (EST) - midnight EST
您可以在字符串末尾添加明确的时间和时区:
new Date('2016-02-04T00:00:00-05:00')
但是您必须知道时区偏移量才能做到这一点。 或者,您可以手动分析字符串并使用数字构造函数,这可能是您最安全的选择。
这是因为日期以 UTC 格式存储(和解析),但以本地时区显示。要显示正确的日期,您可以使用
new Date("2016-02-04").toISOString()
- 比较从函数和生成的日期对象
- Json数据包含日期和时间格式
- Javascript日期格式类似于ISO,但本地
- 如何在输入字段中的按钮的帮助下打开日历,该字段的类型为“=”;日期”;
- 如何在JavaScript中延长当前日期
- 两位数的月份日期验证
- 更改angularjs中的日期-时间格式
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- UIB日期选择器-显示前一天而不是当前日期(附Plunker)
- Javascript新日期在前一天晚上8点出来
- 为什么使用新 Date() 时给定日期会变成前一天
- 由于时区的原因,字符串的新日期显示为前一天
- Jquery日期选择器返回前一天
- 如何提前一天设置第二个日期选择器
- new Date()返回javascript中日期-时间字符串中日期的前一天
- 如何使用引导日期选择器提前一天显示开始日期
- 如何禁用今天和前一天在jquery ui日期picker和所有的可选项将在前面
- SharePoint列表将日期保存为前一天
- 如何验证日期输入设置它总是2天的当前一天使用javascript或jquery
- 为什么Meteor中的服务器渲染模板会在前一天解释日期