【问题标题】:Ionic 2 JSON dates and moment.js troubleIonic 2 JSON 日期和 moment.js 麻烦
【发布时间】:2017-12-04 00:34:49
【问题描述】:

我在使用 Ionic 和 moment.js 处理日期时遇到问题。 我从 ion-datetime 组件中存储了一些日期:

{"year":2017,"month":7,"day":26,"hour":null,"minute":null,"second":null,"millisecond":null,"tzOffset":0}

并使用 moment.js 来“人性化”日期显示:

let somedate = moment(some.date);
console.log('JSON date : ' + JSON.stringify(some.date) + ' resolved as : ' + somedate.format('DD/MM/YYYY'));

得到了结果:

Original JSON date : {"year":2017,"month":7,"day":26,"hour":null,"minute":null,"second":null,"millisecond":null,"tzOffset":0} resolved as : 26/08/2017

您可以考虑,原始 JSON 日期和时刻显示日期之间存在月份偏移量...

我错过了什么?

【问题讨论】:

  • 我想,两个日期都是正确的,我不知道离子框架,但 JS 月份从 0 到 11 运行,其中时刻显示实际月份,所以 JS 中的八月将是 7,但实际上是 8月。
  • moment(Object) 文档中:请注意,像 moment(Array)new Date(year, month, date),月份是 0 索引的。

标签: json date ionic-framework momentjs


【解决方案1】:

Javascript 月份在 0-11 的范围内,即一月是 0,二月是 1,同样,它会将您移至下个月。尝试从月份值中减去 1,以获得正确的月份。

var some = {'date':{"year":2017,"month":6,"day":26,"hour":null,"minute":null,"second":null,"millisecond":null,"tzOffset":0} };

let somedate = moment(some.date);
console.log('JSON date : ' + JSON.stringify(some.date) + ' resolved as : ' + somedate.format('DD/MM/YYYY'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

【讨论】:

    【解决方案2】:

    最后,根据您的回答,我使用 TypeScript 采用原始 JSON 日期格式并返回 Javascript Date 对象的转换方法解决了问题:

      private _JSONDateToDate(jsonDate: any){
    if(typeof jsonDate == 'object')
      return new Date(jsonDate.year, (parseInt(jsonDate.month) - 1), jsonDate.day);
    
    return jsonDate;
    

    }

    我减去“月”属性的 1 个月以获得正确的 Date 对象...然后,我可以使用 moment.js 对其进行操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 2011-08-18
      相关资源
      最近更新 更多