Làm cách nào để thêm 1 ngày vào ngày hiện tại?


93

Tôi có một đối tượng Ngày hiện tại cần được tăng thêm một ngày bằng đối tượng Ngày của JavaScript. Tôi có mã sau tại chỗ:

var ds = stringFormat("{day} {date} {month} {year}", { 
                day: companyname.i18n.translate("day", language)[date.getUTCDay()], 
                date: date.getUTCDate(), 
                month: companyname.i18n.translate("month", language)[date.getUTCMonth()], 
                year: date.getUTCFullYear() 
});

Làm thế nào tôi có thể thêm một ngày vào đó?

Tôi đã thêm +1 vào getUTCDay()getUTCDate()nhưng nó không hiển thị 'Chủ nhật' day, điều mà tôi mong đợi sẽ xảy ra.


1
Ý bạn là gì khi "thêm +1"? Bạn có cần ngày hôm sau hay thứ gì khác không?
Aleks G

Không date: (date.getUTCDate()+1)hoạt động (làm việc cho tôi)? Có thể có xung đột đặt tên với date(như Ngày () - Đối tượng là Đối tượng-Khóa. Bạn đã thử gọi Ngày () - Đối tượng là khác nhau chưa?
Dominik Schreiber

hiện tại nó chỉ hiển thị dưới dạng: <option value = "2012-04-06"> Thứ bảy, ngày 6 tháng 4 năm 2012 </option> <option value = "2012-04-07"> 7 tháng 4 năm 2012 </option>, không có "Chủ nhật 7 thg 4, 2012 "
điên cuồng

Vì vậy, nó không phải là 7 Aprbạn cần (những gì là 'thêm vào ngày hôm sau' đối với tôi), nó là Sunday. Hãy nhớ thêm +1cả vào day:date:(hoặc, như câu trả lời hiện tại đã đề cập, trước đây).
Dominik Schreiber

Câu trả lời:


236

Để thêm một ngày vào đối tượng ngày:

var date = new Date();

// add a day
date.setDate(date.getDate() + 1);

Xem câu hỏi trùng lặp: stackoverflow.com/questions/3674539/… . Câu trả lời này là tốt, nhưng không tính đến DST. Có 2 ngày trong năm không có 24 giờ.
Jess

2
@ Jess — điều đó phụ thuộc vào cách bạn muốn các thay đổi đối với DST được trình bày. Câu hỏi hỏi làm thế nào để thêm một vào ngày, đó chính xác là những gì câu trả lời ở trên làm. Thêm 24 giờ không nhất thiết phải tăng ngày đó, thêm một vào ngày cục bộ bằng setDate luôn luôn làm được.
RobG

Đây là những gì tôi muốn nói. Tăng ngày 10 tháng 3: var a = new Date("2013-03-10T00:00:00.000Z"); a.setDate(a.getDate() + 1); a.toISOString();"2013-03-10T23:00:00.000Z". Đây là một trường hợp nhỏ mà chức năng trên không hoạt động đối với tôi.
Jess

1
Dĩ nhiên là không! Bạn bắt đầu với thời gian UTC, sau đó về cơ bản chuyển đổi nó thành địa phương, thêm một ngày, sau đó chuyển đổi nó trở lại UTC. Vì vậy, một ngày đã được thêm vào ngày địa phương , nhưng chỉ 23 giờ theo giờ UTC. Nếu bạn thêm 1 vào ngày UTC, bạn sẽ nhận lại 01:00:00 giờ địa phương. Hành vi đó không phải là duy nhất đối với tiết kiệm ánh sáng ban ngày, đó là hệ quả của việc sử dụng ba múi giờ khác nhau.
RobG

8
Aha. Tôi không nhận ra rằng getDate đang chuyển đổi từ UTC sang giờ địa phương. a.setUTCDate(a.getUTCDate() + 1);<- hoạt động với các ngày ở Zulu.
Jess

40

Theo ý kiến ​​khiêm tốn của tôi, cách tốt nhất là chỉ thêm một ngày đầy đủ tính bằng mili giây, tùy thuộc vào cách bạn tính toán mã của bạn, nó có thể rối tung lên nếu bạn vào ngày cuối cùng của tháng.

ví dụ ngày 28 tháng 2 hoặc ngày 31 tháng 3.

Đây là một ví dụ về cách tôi sẽ làm điều đó:

var current = new Date(); //'Mar 11 2015' current.getTime() = 1426060964567
var followingDay = new Date(current.getTime() + 86400000); // + 1 day in ms
followingDay.toLocaleDateString();

imo này đảm bảo độ chính xác

đây là một ví dụ khác Tôi không thích điều đó có thể làm việc cho bạn nhưng không sạch bằng liều lượng ở trên

var today = new Date('12/31/2015');
var tomorrow = new Date(today);
tomorrow.setDate(today.getDate()+1);
tomorrow.toLocaleDateString();

imho this === 'POOP'

Vì vậy, một số bạn đã hiểu rõ về cách tiếp cận mili giây của tôi vì tiết kiệm thời gian ánh sáng ban ngày. Vì vậy, tôi sẽ bash điều này ra. Thứ nhất, Một số quốc gia và tiểu bang không có thời gian tiết kiệm ánh sáng ban ngày. Thứ hai Thêm chính xác 24 giờ là một ngày. Nếu liều số ngày không thay đổi mỗi năm một lần nhưng sau đó được cố định 6 tháng sau, tôi không thấy có vấn đề gì ở đó. Nhưng với mục đích rõ ràng và phải đối phó với cái ác Date (), tôi đã nghĩ kỹ điều này và giờ hoàn toàn ghét Date. Vì vậy, đây là Phương pháp tiếp cận mới của tôi

var dd = new Date(); // or any date and time you care about 
var dateArray =  dd.toISOString().split('T')[0].split('-').concat( dd.toISOString().split('T')[1].split(':') );
// ["2016", "07", "04", "00", "17", "58.849Z"] at Z 

Bây giờ cho phần thú vị!

var date = { 
    day: dateArray[2],
    month: dateArray[1],
    year: dateArray[0],
    hour: dateArray[3],
    minutes: dateArray[4],
    seconds:dateArray[5].split('.')[0],
    milliseconds: dateArray[5].split('.')[1].replace('Z','')
}

bây giờ chúng tôi có Đối tượng ngày quốc tế hợp lệ chính thức của chúng tôi được viết rõ ràng tại kinh tuyến Zulu. Bây giờ để thay đổi ngày

  dd.setDate(dd.getDate()+1); // this gives you one full calendar date forward
  tomorrow.setDate(dd.getTime() + 86400000);// this gives your 24 hours into the future. do what you want with it.

Việc thêm giây / mili giây sẽ không hoạt động để tiết kiệm ánh sáng ban ngày.
Matt H

@Matt H Bạn lấy ý tưởng đó từ đâu. Thời gian được đặt theo UTC tính bằng mili giây từ ngày 1970/01/01
Peter the Russian

1
Đó sẽ là ngày hôm sau theo giờ UTC, có, nhưng không nhất thiết phải theo giờ địa phương. Vào ngày Spring Forward ở Mỹ, có 25 giờ trong ngày. Vì vậy, nếu bạn có ví dụ: 31/03/15 lúc 00:00 giờ và thêm 86400000 mili giây, vào ngày Sprint Forward, giờ địa phương sẽ là 31/03/15 lúc 23:00 giờ vì có 25 giờ trong ngày đó.
Matt H

3
bạn có thể thấy hiệu ứng như thế này:var dte = Date.parse('2015-11-01'); console.log(dte); dte.setTime(dte.getTime() + 86400000 ); console.log(dte);
Matt H

1
Điều này được thiết kế quá mức. Nếu bạn đang gặp sự cố như thế này, hãy sử dụng thư viện như khoảnh khắc hoặc thứ gì đó để giúp mọi thứ dễ dàng hơn.
Joshua Michael Wagoner

11

Nếu bạn muốn thêm một ngày (24 giờ) vào ngày giờ hiện tại, bạn có thể thêm mili giây như sau:

new Date(Date.now() + ( 3600 * 1000 * 24))

9
int days = 1;
var newDate = new Date(Date.now() + days*24*60*60*1000);

CodePen

var days = 2;
var newDate = new Date(Date.now()+days*24*60*60*1000);

document.write('Today: <em>');
document.write(new Date());
document.write('</em><br/> New: <strong>');
document.write(newDate);


Việc thêm một mili giây không thành công vì không phải tất cả các ngày đều dài 24 giờ ở những nơi quan sát tiết kiệm ánh sáng ban ngày. Ví dụ: Chile kết thúc tiết kiệm ánh sáng ban ngày vào lúc nửa đêm vào đầu ngày 14 tháng 5 năm 2017. Đồng hồ sẽ hoạt động trở lại từ nửa đêm đến 23:00. Vì vậy, việc thêm 24 giờ vào 2017-05-13 00:00:00 sẽ tạo ra 2017-05-13 23:00:00 và ngày không thay đổi (một số trình duyệt sẽ làm điều đó vào chính xác nửa đêm, những trình duyệt khác chậm hơn một phần nghìn giây) . :-(
RobG

2

Lấy cảm hứng từ jpmottin trong câu hỏi này , đây là một mã dòng:

var dateStr = '2019-01-01';
var days = 1;

var result = new Date(new Date(dateStr).setDate(new Date(dateStr).getDate() + days));

document.write('Date: ', result); // Wed Jan 02 2019 09:00:00 GMT+0900 (Japan Standard Time)
document.write('<br />');
document.write('Trimmed Date: ', result.toISOString().substr(0, 10)); // 2019-01-02

Hi vọng điêu nay co ich


-3
currentDay = '2019-12-06';
currentDay = new Date(currentDay).add(Date.DAY, +1).format('Y-m-d');

Cái này là cái gì? Bạn đang sử dụng một thư viện?
remborg
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.