【问题标题】:Add time to current date in javascript or type script在 javascript 中将时间添加到当前日期或键入脚本
【发布时间】:2021-09-10 08:29:21
【问题描述】:

我正在尝试将时间添加到当前日期。

示例:

我有这个时间:05:17 am

我想通过用这个时间替换当前时间来添加这个时间当前日期。

如果当前日期和时间是:10-09-2021 11:30 am

我想添加当前日期并用我的特定时间替换时间 => 例如上面的输出:10-09-2021 05:17 am

我正在尝试:

var time = this.timeInput;
new Date().getTime() + convertTimeToInt(time);

// in this case we add current time to my input time, i don't want this.

convertTimeToInt() 是一种将时间转换为整数的方法。

有什么想法吗?

【问题讨论】:

    标签: javascript date datetime


    【解决方案1】:

    这样就可以了

    let time = '05:17 pm';
    let splittedTime = time.split(' ');
    let [hours, minutes] = splittedTime[0].split(':');
    let isAm = splittedTime[1] === 'am'; // in europe we don't use am, the hours goes from 0 to 24
    
    var date = new Date(); // now
    console.log('before ' + date); 
    
    let hourToAdd = 0;
    if(+hours === 12) {
        if(isAm) {
            hourToAdd = - 12; // at midnight we dont add +12 nor +0, we want 12am to be 0 hours
        } else {
            hourToAdd = 0;
        }
    } else {
        hourToAdd = isAm ? 0 : 12;
    }
    
    // use setHours to set time
    date.setHours(+hours + hourToAdd, +minutes, 0, 0); 
    console.log('after ' + date);  
    

    输出:

    let time = '12:17 pm';
    [LOG]: "before Fri Sep 10 2021 14:37:07 GMT+0200
    [LOG]: "after Fri Sep 10 2021 12:17:00 GMT+0200
    
    let time = '12:17 am';
    [LOG]: "before Fri Sep 10 2021 14:37:27 GMT+0200
    [LOG]: "after Fri Sep 10 2021 00:17:00 GMT+0200
    
    let time = '05:17 am';
    [LOG]: "before Fri Sep 10 2021 14:37:45 GMT+0200
    [LOG]: "after Fri Sep 10 2021 05:17:00 GMT+0200
    
    let time = '05:17 pm';
    [LOG]: "before Fri Sep 10 2021 14:38:21 GMT+0200
    [LOG]: "after Fri Sep 10 2021 17:17:00 GMT+0200
    

    更新:没有 am/pm,你可以使用

    let time = '05:17';
    let [hours, minutes] = time.split(':');
    var date = new Date(); // now
    console.log('before ' + date); 
    date.setHours(+hours, +minutes, 0, 0); // set hours/minute
    console.log('after ' + date); 
    

    输出:

    [LOG]: "before Fri Sep 10 2021 11:03:07 GMT+0200 
    [LOG]: "after Fri Sep 10 2021 05:17:00 GMT+0200 
    

    【讨论】:

    • 哦,对不起,兄弟,我使用的时间是 0 到 24 点,而不是上午和下午 :(。如何重构这段代码?@Pilpo
    • 我根据你的评论更新了我的答案:)
    • isAm ? +hours : +hours + 12 将在上午 12 点和下午 12 点失败,它应该是 hours % 12 + isAm ? 0 : 12 其中 isAm 可以是 let isAm = /am/i.test(time);
    • @RobG 我不同意你对12 am 的看法,因为如果是12:00 am,我们希望它是中午,所以12 很好。但你是对的,下午 12 点有一个失踪案例,我们希望它是在午夜而不是 +24 小时之后。谢谢你,我已经更新了我的答案!谢谢
    • 上午 12 点通常是午夜,而不是中午,因此应转换为 0,而不是 12。另一方面,下午 12 点通常是中午,但上面的代码会将其转换为 24,即午夜在一天结束时转换为 0 并增加日期。
    猜你喜欢
    • 1970-01-01
    • 2020-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多