向JavaScript Date对象添加小时?

2020/09/28 09:01 · javascript ·  · 0评论

令我惊讶的是,JavaScript的Date对象没有实现任何类型的add函数。

我只是想要一个可以做到这一点的函数:

var now = Date.now();
var fourHoursLater = now.addHours(4);

function Date.prototype.addHours(h) {

   // how do I implement this?  

}

我只需要一些指示即可。

  • 我需要进行字符串解析吗?

  • 我可以使用setTime吗?

  • 毫秒呢?

像这样:

new Date(milliseconds + 4*3600*1000 /*4 hrs in ms*/)?  

不过,这似乎确实很骇人-甚至行得通吗?

JavaScript本身具有可怕的日期/时间API。但是,您可以使用纯JavaScript来执行此操作:

Date.prototype.addHours = function(h) {
  this.setTime(this.getTime() + (h*60*60*1000));
  return this;
}
Date.prototype.addHours= function(h){
    this.setHours(this.getHours()+h);
    return this;
}

测试:

alert(new Date().addHours(4));

以下代码是要添加4小时的日期(例如今天的日期)

var today = new Date();
today.setHours(today.getHours() + 4);

如果您尝试将4加到23(请参阅docs,则不会导致错误

如果您指定的参数超出预期范围,则setHours()尝试相应地更新Date对象中的日期信息

最好通过返回Date对象的副本而不是更改其参数来使addHours方法不可变。

Date.prototype.addHours= function(h){
    var copiedDate = new Date(this.getTime());
    copiedDate.setHours(copiedDate.getHours()+h);
    return copiedDate;
}

这样,您可以链接一堆方法调用而不必担心状态。

更改为DST或从DST更改时,kennerbec建议的版本将失败,因为它是设置的小时数。

this.setUTCHours(this.getUTCHours()+h);

会增加h时间,而this与时间系统的特性无关。杰森·哈维格(Jason Harwig)的方法同样有效。

您可以使用momentjs http://momentjs.com/库。

var moment = require('moment');
foo = new moment(something).add(10, 'm').toDate();

我也认为不应修改原始对象。因此,为了节省未来的人力,这里有一个基于杰森·哈维格塔希尔·哈桑的组合解决方案

Date.prototype.addHours= function(h){
    var copiedDate = new Date();
    copiedDate.setTime(this.getTime() + (h*60*60*1000)); 
    return copiedDate;
}

Datejs库中有一个添加

这是JavaScript date方法肯纳贝克明智地提到了getHours()和setHours();

检查其是否尚未定义,否则在Date原型上对其进行定义:

if (!Date.prototype.addHours) {
    Date.prototype.addHours = function(h) {
        this.setHours(this.getHours() + h);
        return this;
    };
}

处理此问题的另一种方法是将日期转换为unixtime(纪元),然后在(毫秒)秒中添加等效项,然后将其转换回。这样,您就可以处理日和月的转换,例如将4小时增加到21,这将导致第二天01:00。

对于javascript中简单的添加/减去小时/分钟功能,请尝试以下操作:

function getTime (addHour, addMin){
    addHour = (addHour?addHour:0);
    addMin = (addMin?addMin:0);
    var time = new Date(new Date().getTime());
    var AM = true;
    var ndble = 0;
    var hours, newHour, overHour, newMin, overMin;
    //change form 24 to 12 hour clock
    if(time.getHours() >= 13){
        hours = time.getHours() - 12;
        AM = (hours>=12?true:false);
    }else{
        hours = time.getHours();
        AM = (hours>=12?false:true);
    }
    //get the current minutes
    var minutes = time.getMinutes();
    // set minute
    if((minutes+addMin) >= 60 || (minutes+addMin)<0){
        overMin = (minutes+addMin)%60;
        overHour = Math.floor((minutes+addMin-Math.abs(overMin))/60);
        if(overMin<0){
            overMin = overMin+60;
            overHour = overHour-Math.floor(overMin/60);
        }
        newMin = String((overMin<10?'0':'')+overMin);
        addHour = addHour+overHour;
    }else{
        newMin = minutes+addMin;
        newMin = String((newMin<10?'0':'')+newMin);
    }
    //set hour
    if(( hours+addHour>=13 )||( hours+addHour<=0 )){
        overHour = (hours+addHour)%12;
        ndble = Math.floor(Math.abs((hours+addHour)/12));
        if(overHour<=0){
            newHour = overHour+12;
            if(overHour == 0){
                ndble++;
            }
        }else{
            if(overHour ==0 ){
                newHour = 12;
                ndble++;
            }else{
                ndble++;
                newHour = overHour;
            }
        }
        newHour = (newHour<10?'0':'')+String(newHour);
        AM = ((ndble+1)%2===0)?AM:!AM;
    }else{
        AM = (hours+addHour==12?!AM:AM);
        newHour = String((Number(hours)+addHour<10?'0':'')+(hours+addHour));
    }
    var am = (AM)?'AM':'PM';
    return new Array(newHour, newMin, am);
};

无需参数即可使用它来获取当前时间

getTime();

或使用参数来获取增加的分钟/小时的时间

getTime(1,30); // adds 1.5 hours to current time
getTime(2);    // adds 2 hours to current time
getTime(0,120); // same as above

甚至是消极的时间

getTime(-1, -30); // subtracts 1.5 hours from current time

该函数返回一个数组

array([Hour], [Minute], [Meridian])

SPRBRN是正确的。为了说明月份和年份的开始/结束,您需要转换为Epoch并返回。

这是您的操作方式:

var milliseconds = 0;          //amount of time from current date/time
var sec = 0;                   //(+): future
var min = 0;                   //(-): past
var hours = 2;
var days = 0;

var startDate = new Date();     //start date in local time (we'll use current time as an example)

var time = startDate.getTime(); //convert to milliseconds since epoch

//add time difference
var newTime = time + milliseconds + (1000*sec) + (1000*60*min) + (1000*60*60*hrs) + (1000*60*60*24*days);

var newDate = new Date(newTime); //convert back to date; in this example: 2 hours from right now


或在一行中完成(变量名与上面的相同:

var newDate = 
    new Date(startDate.getTime() + millisecond + 
        1000 * (sec + 60 * (min + 60 * (hours + 24 * days))));

这是获取递增或递减数据值的简便方法。

const date = new Date()
const inc = 1000 * 60 * 60 // an hour
const dec = (1000 * 60 * 60) * -1 // an hour

const _date = new Date(date)
return new Date( _date.getTime() + inc )
return new Date( _date.getTime() + dec )

有点混乱,但可以!

给定这样的日期格式:2019-04-03T15:58

  //Get the start date.
  var start = $("#start_date").val();
  //Split the date and time.
  var startarray = start.split("T");
  var date = startarray[0];
  var time = startarray[1];

  //Split the hours and minutes.
  var timearray = time.split(":");

  var hour = timearray[0];
  var minute = timearray[1];
  //Add an hour to the hour.
  hour++;
  //$("#end_date").val = start;
  $("#end_date").val(""+date+"T"+hour+":"+minute+"");

您的输出将是:2019-04-03T16:58

本文地址:http://javascript.askforanswer.com/xiangjavascript-dateduixiangtianjiaxiaoshi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!