【问题标题】:Javascript date shows a day before [duplicate]Javascript日期显示前一天[重复]
【发布时间】:2018-03-26 17:02:32
【问题描述】:

我在我的 Angular 应用程序中使用 mydatepicker。当用户单击特定日期时,我将获得所选日期。但我想要这样的日期格式。

20180320

2018-03-20

所以我所做的就是转换如下。

onDateChange(event) {
    this.selectDate = event.jsdate.toISOString().slice(0,10)
}

这有助于我了解我的格式。但它显示前一天。这意味着,如果用户从日历中选择 2018-03-20 我的 selectDate = 2018-03-19

我可以使用 moment 来做到这一点,但由于某些原因我没有使用这个项目。有人可以帮我纠正这个问题吗?

【问题讨论】:

  • 您可能遇到了时区问题。检查日历时区是否与您自己的时区匹配。

标签: javascript angular date


【解决方案1】:

试试这个来考虑时区

onDateChange(event){
    var localDate =  new Date(event.jsdate.getTime() - event.jsdate.getTimezoneOffset() * 60000);
    this.selectDate = localDate.toISOString().slice(0,10);
}

【讨论】:

  • 这行得通。你能解释一下吗?
  • 它基本上创建了一个新的日期来调整时区偏移量,所以当你调用toISOString() 它会给你本地日期时间而不是UTC日期时间
【解决方案2】:

toISOString 始终采用 UTC+0 时间。如果你 console.log 它,你应该在最后看到一个 Z。这意味着格林威治标准时间。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString

【讨论】:

    【解决方案3】:

    用原型函数试试这个

    Date.prototype.getDDMMYYYY = function () {
        var date = JSON.stringify(this.getDate()).length == 1 ? ("0" + this.getDate()) : this.getDate();
        var month = JSON.stringify(this.getMonth()).length == 1 ? ("0" + this.getMonth()) : this.getMonth();
        var year = this.getFullYear();
        return  year+"-"+month+"-"+date;
    }
    

    只需替换此代码

    onDateChange(event){
       this.selectDate = event.jsdate.getDDMMYYYY()
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      相关资源
      最近更新 更多