Javascript日期对象总是落后一天

时间:2016-09-05 21:02:52

标签: javascript html date

我正在尝试将日期对象从后端数据库转换为字符串以显示在视图上,但是,当我转换它时,结果总是落后一天。

代码:

date = this.props.date;

d = new Date(date)
    options = {
      month: "long", weekday: "long", year: "numeric",
      day: "numeric"
    };

    dateStr = d.toLocaleDateString("en-us",options)

提供的编辑示例: 关于后端结构,日期通过简单的html datepicker表单插入到数据库中。

目前,this.props.date,如果在视图上呈现,将呈现如下内容:

"2016-10-01"

当我使用上面的代码时,它将成为:

"Friday, September 30, 2016"

1 个答案:

答案 0 :(得分:0)

假设您的后端日期是UTC,特别是ISO8601,并且您希望显示的日期在en-us语言区域中为UTC。



var date = "2016-10-01";
var parts = date.split('-');
parts[1] -= 1;
var d = new Date(Date.UTC.apply(null, parts));
options = {
  month: "long",
  weekday: "long",
  year: "numeric",
  day: "numeric",
  timeZone: 'UTC'
};

document.getElementById('out').textContent = d.toLocaleDateString("en-us", options);

<pre id="out"></pre>
&#13;
&#13;
&#13;

假设日期是UTC并且Date对象正确处理ISO8601(某些旧版本没有),那么您可以依赖于Date的内置解析。

&#13;
&#13;
var date = "2016-10-01";
var d = new Date(date);
options = {
  month: "long",
  weekday: "long",
  year: "numeric",
  day: "numeric",
  timeZone: 'UTC'
};

document.getElementById('out').textContent = d.toLocaleDateString("en-us", options);
&#13;
<pre id="out"></pre>
&#13;
&#13;
&#13;

所以我所做的就是将输出显式设置为UTC,否则它将使用运行时的默认时区。值得注意的是toLocaleDateString仍然处于起步阶段,并且可能因浏览器而异,就像ISO8601解析一样。