【问题标题】:Changing momentjs date object format to another将 momentjs 日期对象格式更改为另一种
【发布时间】:2017-10-24 19:12:47
【问题描述】:

我需要将moment() 对象更改为其他格式。例如,我收到这种格式的日期,'yyyy-mm-dd',我需要将其更改为'yyyy mm dd'。我目前正在使用这个解决方案,我想知道有没有更优雅的方式来做到这一点?

let dateValue = moment(moment(value, 'YYYY-MM-DD').format('YYYY MM DD'), 'YYYY MM DD');

编辑:

所以看来问题不在于瞬间对象不同。这是我的完整代码:

class EditRelation extends Component {
  constructor(props) {
    super(props);
    const { validFrom, validTo } = props.relationMember;

    this.state = {
      validFrom: moment(validFrom, 'YYYY MM DD'),
      validTo: moment(validTo, 'YYYY MM DD'),
    }

    this.handleChange = this.handleChange.bind(this);
  }

  handleChange(e) {
    const { id, type, value } = e.target;
    e.preventDefault();
    if (type == 'date') {
      const dateValue = moment(value, 'YYYY-MM-DD');
      if (id == 'validTo' && dateValue < moment()) {
        return;
      }

      this.setState({ [id]: dateValue });
    } else {
      this.setState({ [id]: value });
    }
  };

  render() {
    const { validFrom, validTo } = this.state;

    return (
      <form onSubmit={this.handleSubmit} ref={(form) => { this.form = form; }}>
        <Label for="validFrom"><FormattedMessage id="RELATION_EDIT_MODAL.ACTIVE_FROM" /></Label>
        <Input
          type="date"
          name="validFrom"
          id="validFrom"
          value={validFrom.format('YYYY-MM-DD')}
          onChange={this.handleChange}
        />
        <Label for="validTo"><FormattedMessage id="RELATION_EDIT_MODAL.ACTIVE_TIL" /></Label>
        <Input
          type="date"
          name="validTo"
          id="validTo"
          value={validTo.format('YYYY-MM-DD')}
          onChange={this.handleChange}
        />
      </form>
    );
  }
}

当更改日期输入值时,我得到The specified value "Invalid date" does not conform to the required format, "yyyy-MM-dd". 虽然这是因为时刻对象格式不同,但似乎并非如此。

【问题讨论】:

  • 看起来您正在使用 moment 将一个字符串转换为另一个字符串。你真的需要 moment 对象还是只需要字符串?
  • 我需要的是对象而不是字符串。
  • “需要将 moment() 对象更改为其他格式”是什么意思?时刻代表一个日期。如果日期格式不同,它可以创建一个字符串表示,但对象本身总是相同的。
  • @GuyYogev 你说得对,问题不存在,我用完整的代码编辑了我的问题。

标签: javascript date momentjs


【解决方案1】:

在您准备好将日期输出为字符串之类的东西之前,您无需指定格式。这是超级多余的:

moment(moment(value, 'YYYY-MM-DD').format('YYYY MM DD'), 'YYYY MM DD')

因为您正在获取原始对象 -- moment(value, 'YYYY-MM-DD') -- 将其转换为带有 .format() 的字符串,并从该字符串创建相同的时刻对象。您最终会得到相同的对象,只需使用:

 let dateValue = moment(value, 'YYYY-MM-DD')

您只需要等到必须打印字符串或执行其他需要特定格式的操作,然后调用:

dateValue.format('YYYY MM DD')

【讨论】:

    【解决方案2】:

    基本上,最好不使用模块,因为它显示了你解决问题的能力,你会更有信心。你可以使用 for 循环来做到这一点:

    var date = '1999-03-10'
    
    for(let i = 0; i < date.length; i++)
        if (date[i] == "-")
            date[i] = " "
    
    console.log (date)
    

    【讨论】:

    • 如果你只是对字符串进行操作,为什么不直接使用date.replace(/-/g, ' ')
    • 我不同意 - 在生产代码中我总是使用模块而不是从头开始重写(除非我实际上是学生,但提问者没有这么说)。
    【解决方案3】:
        let parsedDate = moment('2014-02-22', 'YYYY-MM-DD');
        console.log('parsedDate', parsedDate); // moment object
    
        let dateInNewFormat = parsedDate.format('YYYY MM DD');
        console.log('dateInNewFormat', dateInNewFormat); // date string in new format
    

    【讨论】:

      【解决方案4】:
      const value = '2017-10-24'
      const date = moment(value).format('YYYY MM DD')
      //2017 10 24
      

      【讨论】:

        猜你喜欢
        • 2012-06-27
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 2013-07-13
        相关资源
        最近更新 更多