moment.js 连接日期和时间

Posted

技术标签:

【中文标题】moment.js 连接日期和时间【英文标题】:moment.js concatenate date and time 【发布时间】:2017-07-13 06:29:54 【问题描述】:

我在一个表单中有四个字段,其中一些包含初始日期和结束日期 (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');

我打算然后得到两个日期之间的秒差,连接开始日期和时间以及结束日期和时间。我尝试过这样做,但无济于事:

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

【问题讨论】:

【参考方案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>

【讨论】:

【参考方案2】:

失败是尝试连接值,用这样的东西进行测试:

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);

【讨论】:

initialdate + start_date 失败,因为此时它们都是 Moment 对象。【参考方案3】:

[2021] 最优雅的解决方案是:

/* `date` and `time` are instances of Moment */

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

【讨论】:

上午或下午呢? 此解决方案确认可以使用上午/下午时间。【参考方案4】:

IMO 更清洁的解决方案是使用 moment 的 hourminute getter 和 setter。

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

【讨论】:

【参考方案5】:

只需使用此功能

function getCombinedDateObject(date, time) 
let calculatedDateString = '';
if (date && time) 
  let utcDate = moment.utc(date);
  let utcTime = moment.utc(time);
  calculatedDateString = moment(`$utcDate.format('YYYY-MM-DD') $utcTime.format("HH:mm:ss z")`);

let finalDateTime = new Date(calculatedDateString);
if (isNaN(finalDateTime.getTime()))
  return null;
else
  return finalDateTime;

【讨论】:

【参考方案6】:

我的回答很简单, 我只是将日期时间更改如下:

const date = new Date(myDate)
const time = new Date(myTime)
date.setHours(time.getHours())
date.setMinutes(time.getMinutes())

【讨论】:

以上是关于moment.js 连接日期和时间的主要内容,如果未能解决你的问题,请参考以下文章

Flask-Moment本地化日期和时间

Moment.js:日期之间的日期

Moment.js 从日期获取日期名称

Moment.js让日期处理变得更简单

Flask从入门到精通之Flask-Moment本地化日期和时间

使用 moment.js 设置可变日期值