如何添加小时到unix时间戳毫秒?



用户可以在app中选择预约的时间和时长。我想给时间加上持续时间来显示结束时间。我在后台以毫秒为单位处理所有事情,并在几个小时内通过函数将其转换回用户。我不确定我做错了什么,因为在示例中,控制台打印01:00。我认为应该打印16:00

这里是代码的硬编码淡化版本:

var date = '2021-02-12';
var start_time = '15:00';//24hour format
var total_hours = '3600000';//total hours from hidden input in miliseconds//3600000 = 1hour
var miliseconds = new Date(date + ' ' + start_time).getMilliseconds();//convert datetime to mili
//add hours to start time to get end time
var end_time = parseInt(miliseconds) + parseInt(total_hours);
console.log(msToTime(end_time));
function msToTime(duration) {
var milliseconds = parseInt((duration % 1000) / 100),
seconds = Math.floor((duration / 1000) % 60),
minutes = Math.floor((duration / (1000 * 60)) % 60),
hours = Math.floor((duration / (1000 * 60 * 60)) % 24);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return hours + ":" + minutes ;
}

本地时区问题。这提供了您正在寻找的16:00

var date = '2021-02-12';
var start_time = '15:00';//24hour format
var total_hours = '3600000';//total hours from hidden input in miliseconds//3600000 = 1hour
var miliseconds = Date.parse(date + 'T' + start_time + ':00.000Z');//convert datetime to mili
//add hours to start time to get end time
var end_time = parseInt(miliseconds) + parseInt(total_hours);
console.log(msToTime(end_time));
function msToTime(duration) {
var milliseconds = parseInt((duration % 1000) / 100),
seconds = Math.floor((duration / 1000) % 60),
minutes = Math.floor((duration / (1000 * 60)) % 60),
hours = Math.floor((duration / (1000 * 60 * 60)) % 24);
hours = (hours < 10) ? "0" + hours : hours;
minutes = (minutes < 10) ? "0" + minutes : minutes;
seconds = (seconds < 10) ? "0" + seconds : seconds;
return hours + ":" + minutes ;
}

为什么不使用已经定义的Date对象?

Actum Ne Agas: "不要做已经做过的事"。

.getMilliseconds()返回日期的毫秒部分,而不是以毫秒为单位的整个日期(就像.getHourse()返回日期的小时部分一样)。

以毫秒为单位获取时间的方法是.getTime()。所以使用

var miliseconds = new Date(date + ' ' + start_time).getTime();

您也可以在转换回时间时使用此值,因为Date()构造函数接受以毫秒为单位的时间。

function msToTime(duration) {
var d = new Date(duration);
var hours = d.getHours();
var minutes = d.getMinutes();
return hours + ":" + minutes ;
}

最新更新