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 的 hour
和 minute
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 连接日期和时间的主要内容,如果未能解决你的问题,请参考以下文章