จะเพิ่ม 30 นาทีไปยังวัตถุวันที่ของ JavaScript ได้อย่างไร


785

ฉันต้องการได้รับวัตถุวันที่ซึ่งภายหลังจากวัตถุวันที่อื่น 30 นาที ฉันจะทำอย่างไรกับ JavaScript?


1
ฉันสร้างสคริปต์ป๊อปอัพปฏิทินเล็ก ๆ ใน js บนGithubอาจดูรหัสเพื่อดูว่าวัตถุวันที่ถูกรบกวนด้วย นอกจากนี้ให้ตรวจสอบชุด Javascriptเป็นการอ้างอิง js ที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งสำหรับวัตถุวันที่
Christian

2
คำตอบทั้งหมดด้านล่างที่ใช้รูปแบบของdate.setMinutes(date.getMinutes() + ...)จะไม่ข้ามเขตแดนการปรับเวลาตามฤดูกาล ยกตัวอย่างเช่น (สมมติว่า '2014/03/09' เป็นเขตแดน Daylight Saving): var d = new Date('2014-03-09 01:59:00'), f = new Date(d.getTime()); d.setMinutes(d.getMinutes() + 30); dคือตอนนี้ 30 fนาทีก่อนหน้านี้ไม่ช้ากว่า
Spig

1
@Spig: 30 นาทีหลังจาก 1:59 น. ในขอบเขต DST คือ 1:29 AM ไม่มีข้อผิดพลาด หากคุณพิมพ์fและdคุณจะเห็นข้อความหนึ่งบอกว่า "GMT-0500" อีกอันบอกว่า "GMT-0400" (หรือเขตเวลาของคุณคืออะไร) นอกจากนี้หากคุณโทรหา.getTime()ทั้งคู่fและdคุณจะเห็นว่าfมีขนาดใหญ่กว่าd(เช่นในภายหลัง)
กี

1
@Spig: น่าสนใจลองใช้ Firefox และใช้งานได้ ฉันคิดว่ามันอยู่ในพื้นที่สีเทาตามข้อกำหนดว่า getMinutes () ทำงานอย่างไร 01:89จะกลายเป็น02:29ซึ่งไม่มีอยู่ในวันที่คุณ "ก้าวไปข้างหน้า" โครเมี่ยมตัดสินใจว่าควรจะ01:29, FF 03:29ตัดสินใจ ในคืนวันที่เมื่อคุณ "ถอยกลับ" เบราว์เซอร์ทั้งสองข้าม "ถอยกลับ" ชั่วโมงและกระโดดไปข้างหน้าโดย 90 02:29นาทีเพื่อ นี่คือตัวอย่างของ JSFiddle: "spring forward" / "fall back"
Kip

1
หากคำตอบข้อใดข้อหนึ่งด้านล่างตอบคำถามของคุณวิธีที่เว็บไซต์นี้ใช้งานได้คุณต้อง "ยอมรับ" คำตอบเพิ่มเติมได้ที่นี่: ฉันควรทำอย่างไรเมื่อมีคนตอบคำถามของฉัน . แต่ถ้าคำถามของคุณได้รับคำตอบจริงๆ หากไม่ใช่ให้ลองเพิ่มรายละเอียดเพิ่มเติมในคำถาม
ลา StackExchange

คำตอบ:


951

ใช้ห้องสมุด

ถ้าคุณกำลังทำมากของการทำงานวันที่คุณอาจต้องการที่จะมองเข้าไปในห้องสมุด JavaScript วันเช่นDatejsหรือMoment.js ตัวอย่างเช่นด้วย Moment.js นี่เป็นเพียง:

var newDateObj = moment(oldDateObj).add(30, 'm').toDate();

Vanilla Javascript

นี่เป็นเหมือนคำตอบของความโกลาหลแต่อยู่ในบรรทัดเดียว:

var newDateObj = new Date(oldDateObj.getTime() + diff*60000);

ไหนdiffคือความแตกต่างในนาทีที่คุณต้องการจากoldDateObjเวลา 's มันอาจเป็นลบ

หรือเป็นฟังก์ชั่นที่ใช้ซ้ำได้หากคุณต้องการทำสิ่งนี้ในหลาย ๆ ที่:

function addMinutes(date, minutes) {
    return new Date(date.getTime() + minutes*60000);
}

และในกรณีที่ไม่ชัดเจนเหตุผลที่เราคูณจำนวนนาทีด้วย60000คือการแปลงนาทีเป็นมิลลิวินาที

ระวังด้วย Vanilla Javascript วันที่ยาก!

คุณอาจคิดว่าคุณสามารถเพิ่มวันที่ 24 ชั่วโมงเพื่อรับวันพรุ่งนี้ได้ใช่ไหม ไม่ถูกต้อง!

addMinutes(myDate, 60*24); //DO NOT DO THIS

ปรากฎว่าหากผู้ใช้สังเกตเวลาออมแสงกลางวันไม่จำเป็นต้องใช้เวลา 24 ชั่วโมง มีหนึ่งวันต่อปีที่ยาวเพียง 23 ชั่วโมงและหนึ่งวันต่อปีที่ยาว 25 ชั่วโมง ตัวอย่างเช่นในส่วนใหญ่ของสหรัฐอเมริกาและแคนาดา 24 ชั่วโมงหลังเที่ยงคืนวันที่ 2 พฤศจิกายน 2014 ยังคงเป็น 2 พฤศจิกายน:

const NOV = 10; //because JS months are off by one...
addMinutes(new Date(2014, NOV, 2), 60*24); //In USA, prints 11pm on Nov 2, not 12am Nov 3!

นี่คือเหตุผลที่การใช้หนึ่งในห้องสมุดที่กล่าวถึงข้างต้นนั้นเป็นเดิมพันที่ปลอดภัยกว่าหากคุณต้องทำงานมากกับสิ่งนี้

ด้านล่างเป็นฟังก์ชันทั่วไปที่ฉันเขียน ฉันยังคงแนะนำให้ใช้ห้องสมุด แต่อาจจะเกินความเป็นไปได้ / เป็นไปไม่ได้สำหรับโครงการของคุณ รูปแบบไวยากรณ์หลังจากฟังก์ชั่นMySQL DATE_ADD

/**
 * Adds time to a date. Modelled after MySQL DATE_ADD function.
 * Example: dateAdd(new Date(), 'minute', 30)  //returns 30 minutes from now.
 * https://stackoverflow.com/a/1214753/18511
 * 
 * @param date  Date to start with
 * @param interval  One of: year, quarter, month, week, day, hour, minute, second
 * @param units  Number of units of the given interval to add.
 */
function dateAdd(date, interval, units) {
  if(!(date instanceof Date))
    return undefined;
  var ret = new Date(date); //don't change original date
  var checkRollover = function() { if(ret.getDate() != date.getDate()) ret.setDate(0);};
  switch(String(interval).toLowerCase()) {
    case 'year'   :  ret.setFullYear(ret.getFullYear() + units); checkRollover();  break;
    case 'quarter':  ret.setMonth(ret.getMonth() + 3*units); checkRollover();  break;
    case 'month'  :  ret.setMonth(ret.getMonth() + units); checkRollover();  break;
    case 'week'   :  ret.setDate(ret.getDate() + 7*units);  break;
    case 'day'    :  ret.setDate(ret.getDate() + units);  break;
    case 'hour'   :  ret.setTime(ret.getTime() + units*3600000);  break;
    case 'minute' :  ret.setTime(ret.getTime() + units*60000);  break;
    case 'second' :  ret.setTime(ret.getTime() + units*1000);  break;
    default       :  ret = undefined;  break;
  }
  return ret;
}

สาธิตการทำงาน jsFiddle


14
มันมีพลังมาก มันทำงานได้เป็นจำนวนนาทีใด ๆ แม้ว่าจำนวนจะเป็นลบ
Wahid Bitar

3
สำหรับวินาทีให้คูณด้วย 1,000 แทนที่จะเป็น 60k
ashes999

2
ฟังก์ชัน dateAdd () ดีมาก! แต่มีบันทึกหนึ่งจากฉัน - ความหมายหน่วยควรเป็น "นาที", "สอง" ฯลฯ และช่วงเวลาควรเป็นจำนวนเงิน (2, 10, 45, ... ) ไม่ใช่ในทางกลับกัน ไม่อย่างนั้นความคิดจะดี
Vasil Popov

1
คำตอบนี้ล้มเหลวในการรองรับการหมุนเวียนเดือนดังนั้น 31 ม.ค. บวกหนึ่งเดือนให้ 2 หรือ 3 มี.ค. ขึ้นอยู่กับว่าเป็นปีอธิกสุรทินหรือไม่ addMonthsและaddYearsฟังก์ชั่นในการจัดการคำตอบ Jacobi กับที่ดังนั้นสำหรับผมแล้วมันเป็นคำตอบที่ดี
RobG

1
@ RobG จุดดี ฉันได้เพิ่มการแก้ไขสำหรับเรื่องนี้และเน้นย้ำจุด "ใช้ห้องสมุดถ้าเป็นไปได้"
Kip

238
var d1 = new Date ();
var d2 = new Date ( d1 );
d2.setMinutes ( d1.getMinutes() + 30 );
alert ( d2 );

114
@Jamie: คุณไม่ต้องการDateวัตถุสองชิ้น var d = new Date(); d.setMinutes(d.getMinutes() + 30);
Grant Wagner

15
@ Grant: ฉันสันนิษฐานว่า d2 = "ฉันต้องการได้รับวัตถุวันที่" และ d1 = "ไปยังวัตถุวันที่อื่น"
Jamie

7
@CKeene, setMinutes & getMinutes เป็นส่วนหนึ่งของ Javascript แบบธรรมดา (แม้ว่า datejs จะให้สิ่งอื่น ๆ มากมาย)
s29

4
FYI- สิ่งนี้สามารถข้ามขอบเขตการปรับเวลาตามฤดูกาล การสาธิต JSFiddle: "spring forward" / "ถอยกลับ" (ขอบคุณ @Spig สำหรับสิ่งนี้)
Kip

@trevorgrayson หากพารามิเตอร์ที่คุณระบุอยู่นอกช่วงที่คาดไว้ setMinutes () จะพยายามอัปเดตข้อมูลวันที่ตามลำดับ ตัวอย่างเช่นหากคุณใช้ 100 ชั่วโมงจะเพิ่มขึ้น 1 และ 40 จะถูกใช้เป็นนาที
Mihai Crăiță

155

var oldDateObj = new Date();
var newDateObj = new Date();
newDateObj.setTime(oldDateObj.getTime() + (30 * 60 * 1000));
console.log(newDateObj);


3
โปรดทราบว่าsetTimeส่งกลับค่าการประทับเวลาเป็นมิลลิวินาทีไม่ใช่วัตถุวันที่ (อย่าคิดว่าคุณสามารถใช้สายการบินเดียว)
Alan H.

12
var in30Mins = new Date(+new Date() + 1.8e6)เป็นสายการบินเดียว แต่ไม่แน่ใจว่ามันจะดีไปกว่าสายการบินสองเส้น ;-)
RobG

112

var now = new Date();
now.setMinutes(now.getMinutes() + 30); // timestamp
now = new Date(now); // Date object
console.log(now);


9
พบว่าฉันโพสต์สิ่งนี้ซ้ำ ลบและ +1 แล้ว
Izzy

3
คำตอบที่ง่ายที่สุดสำหรับคำถามนี้
vijay

ฉันคิดว่าsetMinutesคืนค่าเวลา แต่nowยังคงเป็นDateวัตถุดังนั้นnow = new Date(now)ล้าสมัย
p.boiko

46

อาจจะเป็นเช่นนี้?

var d = new Date();
var v = new Date();
v.setMinutes(d.getMinutes()+30);

console.log(v)


6
@ Chacha102: คุณไม่จำเป็นต้องมีสองDateวัตถุ var d = new Date(); d.setMinutes(d.getMinutes() + 30);
Grant Wagner

12
เขาต้องการวัตถุสองวัน อ่านคำถาม วัตถุวันที่หนึ่งซึ่งอยู่ข้างหน้า 30 นาทีของวัตถุวันที่อื่น
Tyler Carter

5
ใช้งานได้ไหมถ้ามันผ่านไปหลายชั่วโมง? ดังนั้นถ้าฉันเรียกว่าเวลา 11:59 น. กำหนดเวลาโอเคที่ 12:29 หรือไม่?
Chris Rae

1
@ChrisRae ใช่มันเป็นเช่นนั้น If a parameter you specify is outside of the expected range, setMinutes() attempts to update the date information in the Date object accordingly.
fridoo

35

ฉันมักจะสร้าง 7 ฟังก์ชั่นเพื่อทำงานกับวันที่ใน JS: addSeconds, addMinutes, addHours, addDays, addWeeks, addMonths, addYears

คุณสามารถดูตัวอย่างได้ที่นี่: http://jsfiddle.net/tiagoajacobi/YHA8x/

วิธีใช้:

var now = new Date();
console.log(now.addMinutes(30));
console.log(now.addWeeks(3));

นี่คือฟังก์ชั่น:

        Date.prototype.addSeconds = function(seconds) {
            this.setSeconds(this.getSeconds() + seconds);
            return this;
        };

        Date.prototype.addMinutes = function(minutes) {
            this.setMinutes(this.getMinutes() + minutes);
            return this;
        };

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

        Date.prototype.addDays = function(days) {
            this.setDate(this.getDate() + days);
            return this;
        };

        Date.prototype.addWeeks = function(weeks) {
            this.addDays(weeks*7);
            return this;
        };

        Date.prototype.addMonths = function (months) {
            var dt = this.getDate();

            this.setMonth(this.getMonth() + months);
            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

        Date.prototype.addYears = function(years) {
            var dt = this.getDate();

            this.setFullYear(this.getFullYear() + years);

            var currDt = this.getDate();

            if (dt !== currDt) {  
                this.addDays(-currDt);
            }

            return this;
        };

ทุกคนสามารถเห็นปัญหาใด ๆ เกี่ยวกับวิธีการนี้หรือไม่?
Dembinski

1
ใช้ moment.js แทน
Victor Pudeyev

@ TheDembinski - คุณคาดว่าจะมีปัญหาอะไร? โดยทั่วไปแล้วการขยายตัวในตัวไม่ชอบ แต่ฉันไม่เห็นปัญหาเกี่ยวกับวันที่ มันจะดีถ้าการเพิ่มครั้งใหญ่แต่ละครั้งจะเลือกการเพิ่มทีละน้อย (ตามวิธีการset * ) ดังนั้นaddHoursจึงเลือกที่จะใช้เวลานาทีวินาทีและมิลลิวินาทีเพื่อให้คุณสามารถdate.addHours(3, 30)เพิ่ม 3 ชั่วโมง 30 นาที addYearsจะใช้เวลาเป็นปีเดือนและวันที่addMonthsจะใช้เวลาเป็นเดือนและวันที่addMinutesจะใช้เวลาเป็นนาทีวินาทีมิลลิวินาทีเป็นต้น
RobG

1
สวัสดี @transformer ฉันจะทำสิ่งนี้new Date().addHours(4).addMinutes(45);คุณสามารถโทรได้มากเท่าที่คุณต้องการเพราะวิธีการส่งกลับ "นี้" ซึ่งเป็นวัตถุวันที่ปัจจุบัน
Jacobi

1
สวัสดี @transformer ฉันไม่แน่ใจว่าฉันเข้าใจปัญหาของคุณ แต่สิ่งเหล่านี้เป็นฟังก์ชั่นต้นแบบคุณสามารถใช้ตามลำดับที่คุณต้องการเช่น: var dt = new Date();จากนั้นdt.addMinutes(45); dt.addHours(4);หรือแม้กระทั่งdt.addMinutes(285);หรือdt.addMinutes(45).addHours(4);ทั้งหมดจะทำงาน หากคุณมีคำถามพร้อมตัวอย่างโค้ดสำหรับปัญหาของคุณโพสต์ไว้ที่นี่เรายินดีที่จะช่วยเหลือคุณ
Jacobi

13

วิธีที่ง่ายที่สุดในการแก้ไขคือการรู้ว่าในวันที่จาวาสคริปต์เป็นเพียงตัวเลข มันเริ่มต้นหรือ0 'Wed Dec 31 1969 18:00:00 GMT-0600 (CST)ทุกคน1แสดงถึงมิลลิวินาที คุณสามารถเพิ่มหรือลบมิลลิวินาทีโดยรับค่าและอินสแตนซ์วันที่ใหม่โดยใช้ค่านั้น คุณสามารถจัดการมันได้ง่ายๆด้วยใจ

const minutesToAdjust = 10;
const millisecondsPerMinute = 60000;
const originalDate = new Date('11/20/2017 10:00 AM');
const modifiedDate1 = new Date(originalDate.valueOf() - (minutesToAdjust * millisecondsPerMinute));
const modifiedDate2 = new Date(originalDate.valueOf() + (minutesToAdjust * millisecondsPerMinute));

console.log(originalDate); // Mon Nov 20 2017 10:00:00 GMT-0600 (CST)
console.log(modifiedDate1); // Mon Nov 20 2017 09:50:00 GMT-0600 (CST)
console.log(modifiedDate2); // Mon Nov 20 2017 10:10:00 GMT-0600 (CST)

10

นี่คือสิ่งที่ฉันทำซึ่งดูเหมือนว่าจะทำงานได้ค่อนข้างดี:

Date.prototype.addMinutes = function(minutes) {
    var copiedDate = new Date(this.getTime());
    return new Date(copiedDate.getTime() + minutes * 60000);
}

จากนั้นคุณสามารถเรียกสิ่งนี้ว่า

var now = new Date();
console.log(now.addMinutes(50));

2
คุณสามารถทำได้return new Date(this.getTime() + minutes * 60000);ฉันไม่ได้คัดลอกชั่วคราวระหว่างวันที่ ;-)
RobG

5

นี่คือเวอร์ชั่นES6 :

let getTimeAfter30Mins = () => {
  let timeAfter30Mins = new Date();
  timeAfter30Mins = new Date(timeAfter30Mins.setMinutes(timeAfter30Mins.getMinutes() + 30));
};

เรียกว่าชอบ:

getTimeAfter30Mins();

ฉันมีผู้ใช้เข้าสู่ 4:30 ชั่วโมง + 2:15 ชม. / นาทีฉันจะอนุญาตให้ผู้ใช้ผ่านเวลาหลายชั่วโมงและเพิ่มไปยังชั่วโมงที่มีอยู่ได้อย่างไร
หม้อแปลง

@transformer คุณสามารถให้ฟิลด์ป้อนข้อมูลที่แตกต่างกันสำหรับชั่วโมงนาทีและอื่น ๆ ที่มีการตรวจสอบหมายเลข
xameeramir

5

ฉันรู้สึกว่าคำตอบมากมายที่นี่ขาดองค์ประกอบเชิงสร้างสรรค์ที่จำเป็นอย่างมากสำหรับการคำนวณการเดินทางข้ามเวลา ฉันขอนำเสนอทางออกสำหรับการแปลทางโลกเป็นเวลา 30 นาที

(jsfiddle ที่นี่ )

function fluxCapacitor(n) {
    var delta,sigma=0,beta="ge";
    (function(K,z){

        (function(a,b,c){
            beta=beta+"tT";
            switch(b.shift()) {
                case'3':return z('0',a,c,b.shift(),1);
                case'0':return z('3',a,c,b.pop());
                case'5':return z('2',a,c,b[0],1);
                case'1':return z('4',a,c,b.shift());
                case'2':return z('5',a,c,b.pop());
                case'4':return z('1',a,c,b.pop(),1);
            }
        })(K.pop(),K.pop().split(''),K.pop());
    })(n.toString().split(':'),function(b,a,c,b1,gamma){
       delta=[c,b+b1,a];sigma+=gamma?3600000:0; 
       beta=beta+"im";
    });
    beta=beta+"e";
    return new Date (sigma+(new Date( delta.join(':')))[beta]());
}

ฉันต้องยอมรับว่านี่คือความคิดสร้างสรรค์ แต่มนุษย์ .. มันอ่านยาก!
Erik Baan

2

สำหรับคนขี้เกียจอย่างฉัน:

คำตอบของ Kip (จากด้านบน) เป็น coffeescript ใช้ "enum" และปฏิบัติการบนวัตถุเดียวกัน:

Date.UNIT =
  YEAR: 0
  QUARTER: 1
  MONTH: 2
  WEEK: 3
  DAY: 4
  HOUR: 5
  MINUTE: 6
  SECOND: 7
Date::add = (unit, quantity) ->
  switch unit
    when Date.UNIT.YEAR then @setFullYear(@getFullYear() + quantity)
    when Date.UNIT.QUARTER then @setMonth(@getMonth() + (3 * quantity))
    when Date.UNIT.MONTH then @setMonth(@getMonth() + quantity)
    when Date.UNIT.WEEK then @setDate(@getDate() + (7 * quantity))
    when Date.UNIT.DAY then @setDate(@getDate() + quantity)
    when Date.UNIT.HOUR then @setTime(@getTime() + (3600000 * quantity))
    when Date.UNIT.MINUTE then @setTime(@getTime() + (60000 * quantity))
    when Date.UNIT.SECOND then @setTime(@getTime() + (1000 * quantity))
    else throw new Error "Unrecognized unit provided"
  @ # for chaining

2

ใช้ไลบรารีที่มีอยู่ที่รู้จักเพื่อจัดการกับนิสัยใจคอที่เกี่ยวข้องในการจัดการกับการคำนวณเวลา ปัจจุบันที่ชื่นชอบของฉันคือmoment.js

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.js"></script>
<script>
 var now = moment(); // get "now"
 console.log(now.toDate()); // show original date
 var thirty = moment(now).add(30,"minutes"); // clone "now" object and add 30 minutes, taking into account weirdness like crossing DST boundries or leap-days, -minutes, -seconds.
 console.log(thirty.toDate()); // show new date
</script>

3
คำตอบไม่สามารถปรับปรุงได้หากคุณลงคะแนนโดยไม่ให้เหตุผล
Ouroborus

OP ขอโซลูชัน JavaScript ไม่ใช่เฟรมเวิร์ก / ไลบรารี
mattpark22

2
@ mattpark22 ในขณะที่ฉันเข้าใจสิ่งที่คุณได้รับห้องสมุด javascript ยังคงเป็น javascript ฉันสามารถแยกส่วนที่เกี่ยวข้องของไลบรารีออกและนำเสนอสิ่งเหล่านั้นเป็นโซลูชันรหัสได้ OP จะมีคำตอบที่เป็นจาวาสคริปต์ในแง่ที่ว่าคุณหมายถึง แต่จะไม่รู้ถึงวิธีแก้ปัญหาทั่วไปที่ยอมรับได้ นอกจากนี้การเพิ่ม 30 นาทีนั้นแทบไม่สำคัญเท่าคำตอบส่วนใหญ่ที่ทำให้เกิดเสียงเนื่องจากมีกรณีขอบจำนวนมากที่ไม่ได้จัดการโดยวัตถุวันที่ ตัวอย่างเช่นคำตอบที่ได้รับความนิยมมากที่สุดจะหยุดเมื่อข้ามเขตแดนเวลา
Ouroborus

@ Ouroborus - ห้องสมุดไม่ควรเป็นทางออกเดียวที่ให้หาก OP ไม่ได้ขอห้องสมุดใน OP หรือแท็ก มิฉะนั้นคำตอบอาจกลายเป็นเพียงแค่วิธีการทำสิ่งต่าง ๆ ในห้องสมุดที่แตกต่างกันและ OP ก็ไม่ได้มีความฉลาดในประเด็นที่แท้จริงของพวกเขา
RobG

1
@RobG ไม่มีใครแนะนำว่าควรให้บริการโซลูชั่นห้องสมุดอย่างเดียว OP ไม่สามารถขอห้องสมุดเป็นพิเศษเพราะจะทำให้คำถามไม่อยู่ในหัวข้อ ถาม "ฉันจะทำอย่างไรกับ JavaScript?" อาจตีความได้ว่าเป็นการระบุว่าเป็นลักษณะเฉพาะของจาวาสคริปต์ (การขอวิธีแก้ปัญหาในภาษาเฉพาะซึ่งต่างจากการขอวิธีแก้ไขปัญหารหัสดิบ) โดยเฉพาะอย่างยิ่งเนื่องจากรายละเอียดนี้ซ้ำในชื่อเรื่องและแท็ก
Ouroborus

1

แค่อีกทางเลือกหนึ่งที่ฉันเขียน:

DP_DateExtensions Library

มันเกินความจริงถ้านี่คือการประมวลผลวันที่ทั้งหมดที่คุณต้องการ แต่มันจะทำสิ่งที่คุณต้องการ

รองรับการจัดรูปแบบวันที่ / เวลา, คณิตศาสตร์วันที่ (เพิ่ม / ลบส่วนของวันที่), เปรียบเทียบวันที่, แยกวันที่ ฯลฯ มันเปิดแหล่งที่มาอย่างอิสระ




1

คุณควรรับค่าวันที่ปัจจุบันเพื่อรับวันที่ด้วย (ms) และเพิ่ม (30 * 60 * 1000) ตอนนี้คุณมี (วันที่ปัจจุบัน + 30 นาที) ด้วย ms

console.log('with ms', Date.now() + (30 * 60 * 1000))
console.log('new Date', new Date(Date.now() + (30 * 60 * 1000)))


0

ฉันรู้ว่าหัวข้อนั้นเก่าเกินไป แต่ฉันค่อนข้างมั่นใจว่ามีผู้พัฒนาบางคนที่ยังต้องการสิ่งนี้อยู่ดังนั้นฉันจึงสร้างสคริปต์ง่าย ๆ สำหรับคุณ ฉันหวังว่าคุณจะสนุกกับมัน!

function strtotime(date, addTime){
  let generatedTime=date.getTime();
  if(addTime.seconds) generatedTime+=1000*addTime.seconds; //check for additional seconds 
  if(addTime.minutes) generatedTime+=1000*60*addTime.minutes;//check for additional minutes 
  if(addTime.hours) generatedTime+=1000*60*60*addTime.hours;//check for additional hours 
  return new Date(generatedTime);
}

let futureDate = strtotime(new Date(), {
    hours: 1, //Adding one hour
    minutes: 45, //Adding fourty five minutes
    seconds: 0 //Adding 0 seconds return to not adding any second so  we can remove it.
});
<button onclick="alert(futureDate)">Travel to the future</button>

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.