我正在尝试在 Angular 应用程序中添加时间到日期。
我有一个日期选择器 (appointmentDate),它返回 Javascript 日期和一个选择框,其中的时间 (appointmentTime) 具有以下值:
"8:00"
"8:30"
"9:00"
等等
我不确定如何创建具有正确时间的日期对象。
我可以执行以下操作来创建时间为 00:30 的日期:
var s = new Date(this.appointmentForm.controls.appointmentDate.value);
s.setMinutes(s.getMinutes()+30);
但如果用户在约会时间选择框中选择 8:30,我不确定如何将时间部分设置为 8:30。
最佳答案
如果您尝试向 Date
实例添加时间,您需要执行如下操作:
const SECONDS_PER_MINUTE = 60 ;
const SECONDS_PER_HOUR = 60 * SECONDS_PER_MINUTE ;
const dtNow = new Date();
console.log(`original: ${dtNow}`);
const dtThen = addTime(dtNow, "08:15");
console.log(`changed: ${dtThen}`);
function addTime(dt, duration) {
const rxDuration = /^\s*(\d\d):(\d\d)\s*$/;
const match = rxDuration.exec(duration);
if (!dt instanceof Date) throw new Error("Invalid dt: dt is not a Date");
if (!match) throw new Error(`Invalid duration: ${duration}`);
const [ , hours, minutes ] = match;
let millisecondsSinceEpoch = dt.valueOf();
millisecondsSinceEpoch += 1000 * (
hours * SECONDS_PER_HOUR
+ minutes * SECONDS_PER_MINUTE
);
return new Date(millisecondsSinceEpoch);
}
如果你想设置日期的时间部分,你可以这样做:
function setTime( dt , duration ) {
const rxDuration = /^\s*(\d\d):(\d\d)\s*$/;
const match = rxDuration.exec(duration);
if (!dt instanceof Date) throw new Error("Invalid dt: dt is not a Date");
if (!match) throw new Error(`Invalid duration: ${duration}`);
const [ , hours, minutes ] = match;
return new Date( dt.getFullYear(), dt.getMonth(), dt.getDate(), hours, minutes, 0, 0 );
}
但老实说,我可能会做这样的事情,使用 moment.js
或luxon
:
const moment = require("moment");
. . .
const appointmentDateTime = moment.parseTwoDigitYear( appointment.date )
.hours( appointment.hour)
.minutes( appointment.minute)
;
因为生命太短,无法编写样板文件。
关于javascript - 向 Javascript 日期添加时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57281131/