【问题标题】:Momentjs shows evaluate one day lessMomentjs 节目评估少一天
【发布时间】:2016-05-09 03:38:42
【问题描述】:

我正在使用Momentjs 来评估react-datetimepicker 中的选定日期。但它比所选日期少一天评估。以下是我用来评估所选日期的代码 sn-p。

var selectedDateArr = ['2016','02','04']
var yr = parseInt(selectedDateArr[0]), mnth = parseInt(selectedDateArr[1] - 1), day = parseInt(selectedDateArr[2]);
var changedDt = moment([yr,mnth,day]);
console.log('Changed Date >>> ',changedDt);

它在 Firefox 中提供以下对象作为控制台结果。

{ _isAMomentObject: true, _i: Date 2016-01-03T18:30:00.000Z, _isUTC: false, _pf: Object, _locale: Object, _d: Date 2016-01-03T18:30:00.000Z }

我已尝试将日期转换为 UTC,但仍然没有成功。

注意:在 chrome 中,它显示了正确的评估,但在将其提供为 minDate 时它会中断;再次评估比选择少一天。

【问题讨论】:

    标签: javascript date datetime datepicker momentjs


    【解决方案1】:

    根据您问题中显示的值,我猜您在印度,这意味着您的本地时区 (IST) 是 GMT+0530(比 GMT 提前五个半小时)。当您 give Moment an array 时,您正在给它本地时间值,并且您不提供的任何值都默认为 0 - 在您的情况下,因为您不提供任何时间值,那就是午夜。 GMT+0530 的 1 月 4 日午夜是 UTC 的 1 月 3 日 18:30。

    如果您希望将值视为 UTC,请使用 moment.utc(...)

    var changedDt = moment.utc([hr,mnth,day]);
    

    【讨论】:

    • 谢谢,它成功了,我现在得到了正确的日期。我试过moment([yr,mnth,day]).utc(),但没有用。我会通过测试并接受答案。
    • @KunalShewale - 这是正确的答案,但也要确保您使用的是输出函数之一,例如 format。不要直接使用 moment 对象的任何带下划线前缀的字段。
    • @MattJohnson - 感谢您的建议。我在当前场景中使用的是相同的
    【解决方案2】:
    moment.unix(timestamp).utc().format('MM/DD/YYYY')
    moment.utc(date).format('MM/DD/YYYY')
    

    如果我们通过了,它将对我有用。

    【讨论】:

      【解决方案3】:

      尝试使用

      var changedDt = moment.tz([yr,mnth,day], timezone).
      

      例如,我在印度,所以我的时区将是“亚洲/加尔各答”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        • 2021-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多