web-dev-qa-db-ja.com

moment.jsが日付と時刻を連結する

フォームには4つのフィールドがあります。最初の日付と終了日(dd/mm/yyyy)を含むフィールドと、開始時刻と終了時刻(hh:ss)を含むフィールドがあります。

次のようなmoment.jsで日付と時刻を取得するために使用するこれらのフィールドの値:

initialdate = moment( $('input#start_date').val(), 'DD/MM/YYYY' );
start_time = moment( $('input#start_time').val(), 'HH:mm');
enddate = moment( $('input#enddate').val(), 'DD/MM/YYYY' );
end_time = moment( $('input#end_time').val(), 'HH:mm');

次に、開始日時と終了日時を連結して、2つの日付の差を秒単位で取得するつもりです。私はこれを試みましたが、役に立ちません:

start = initialdate + start_time;
end = enddate + end_time;
tracker = moment.duration( end.diff(start) ).asSeconds();
17
grankan

失敗は値を連結しようとすることであり、次のようなものでテストします:

let initialdate = '2016-10-01';
let start_time = '19:04:10';
let enddate = '2016-10-01';
let end_time = '19:04:20';

let datetimeA = moment(initialdate + " " + start_time);
let datetimeB = moment(enddate + " " + end_time);

console.log(datetimeA.format());
console.log(datetimeB.format());

let datetimeC = datetimeB.diff(datetimeA, 'seconds');

console.log(datetimeC);
13
mehparra

日付と時刻の文字列を連結し、1つとして解析します。

var date = '23/02/2017';
var time = '15:42';

var dateTime = moment(date + ' ' + time, 'DD/MM/YYYY HH:mm');

console.log(dateTime.format('YYYY-MM-DD HH:mm'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>
14
RobG

IMOのよりクリーンなソリューションは、瞬間のhourおよびminuteゲッターとセッターを使用することです。

let a = moment()
let b = moment().add(3, 'hour').add(37, 'minute') //b is the time portion
a.hour(b.hour()).minute(b.minute())
4
ahota

[2019]最もエレガントなソリューションは:

/* "date" and "time" are moment() objects */

    date = date.set({
          hour: time.get('hour'),
          minute: time.get('minute'),
          second: 0,
          millisecond: 0,
        });

1
SERGEY VOLYNKIN