2017-10-24 21 views
-1

moment()オブジェクトを他の形式に変更する必要があります。たとえば、私は'yyyy-mm-dd'という形式で日付を受け取り、それを'yyyy mm dd'に変更する必要があります。私は現在このソリューションを使用しています。私はこれを行うよりエレガントな方法があることを知りたいですか?momentjs日付オブジェクト形式を別のものに変更する

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

EDIT:

だから、問題は瞬間のオブジェクトが異なることではなかったようです。ここに私の完全なコードがあります:日付入力値を変更する場合

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".を取得します。

+0

瞬間を使って1つの文字列を別の文字列に変換しているようです。あなたは実際に瞬間オブジェクトまたは文字列だけを必要としますか? –

+0

私は文字列ではなくオブジェクトが必要です。 –

+2

「他の形式に瞬間()オブジェクトを変更する必要がある」とはどういう意味ですか?モーメントは日付を表します。異なるフォーマットの日付であれば文字列表現を作成できますが、オブジェクト自体は常に同じです。 –

答えて

0

基本的には、問題解決のスキルが表示され、より自信を得るため、モジュールなしで行う方がよいです。

var date = '1999-03-10' 

for(let i = 0; i < date.length; i++) 
    if (date[i] == "-") 
     date[i] = " " 

console.log (date) 
+0

文字列を操作しているのであれば、なぜ 'date.replace(/ -/g、 '')'を使用しないのですか? –

+1

私は同意しません - プロダクションコードでは、 (私が実際に学生でない限り、質問者はそれを言いません)。 –

0
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 
1

あなたは文字列のようなものに日付を出力する準備ができるまで、あなたは形式を指定する必要はありません:あなたは、forループを使用してそれを行うことができます。これは、超冗長です:

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') 
0
const value = '2017-10-24' 
const date = moment(value).format('YYYY MM DD') 
//2017 10 24