2017-09-29 2 views
2

タイムピッカー付きのカレンダーを作成しようとしています。そのため、日付を変更すると同じ時間になります。 htmlの両方のフィールド(カレンダーと時刻)は同じ変数(vm.inputDate)を使用しており、変更したくありません。
今私は日付変更にトリガこの機能を持っている:これは動作しますある日時から別の日時に時間(hh、mm)をコピーする最も効果的な方法は何ですか?

vm.keepTimeUnchanged = function(changedDateTime, oldDateTime) { 
      var hours = oldDateTime.getHours(); 
      var minutes = oldDateTime.getMinutes(); 

      if (!moment(vm.inputDate).isSame((changedDateTime), 'day')) { 
       vm.inputDate = changedDateTime; 
       vm.inputDate.setHours(hours, minutes); 
      } 
      return vm.inputDate;   
     } 

が、私は別に秒とミリ秒を得ることなく、元の値のように、まったく同じ形式で時間を維持したいと思います。それを行う方法はありますか?そして、全体の操作を実行するためのより良い方法はありますか?

答えて

2

これは、ある瞬間に日付を設定するか、別の時刻に設定することです。これよりはるかに優れているとは限りません。時間が設定されている場合は、秒とミリ秒も設定することが望ましい場合があります。

date1 = moment(date1.toArray().slice(0, 4).concat(
    date2.toArray().slice(4) 
); 

または::

モーメントAPIは次のように、異なる味でそれを行うことができます

let { years, months, date } = date1.toObject(); 
date1 = date2.clone().set({ years, months, date }); 

同じことがES5ではあまり魅力的で、まだそれはそれはとのより良い見えるようにすることが可能ですLodash pick

date1 = date2.clone().set(_.pick(date1.toObject(), 'years', 'months', 'date')); 
+0

ありがとう!少なくともこのソリューションでは、日付を1行に設定することができました。私はそれを解決しよう! –

+0

ようこそ。 – estus

関連する問題