Câu trả lời:
var date = new Date();
date ; //# => Fri Apr 01 2011 11:14:50 GMT+0200 (CEST)
date.setDate(date.getDate() - 1);
date ; //# => Thu Mar 31 2011 11:14:50 GMT+0200 (CEST)
Không hiệu quả lắm, nhưng như oneliner:
var yesterday = new Date(new Date().setDate(new Date().getDate()-1));
Ở trên tạo ra ba Date
đối tượng là không cần thiết lãng phí. Điều này có thể được giảm xuống thành một khởi tạo duy nhất với:
var yesterday = (function(){this.setDate(this.getDate()-1); return this})
.call(new Date)
Hoặc, nếu bạn thích:
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Hoặc, nếu bạn thích ES6 với chức năng mũi tên:
let yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date);
var yesterday = (function(d){ d.setDate(d.getDate()-1); return d})(new Date)
Thử cái này
var d = new Date();
d.setDate(d.getDate() - 1);
Đáng ngạc nhiên là không có câu trả lời cho giải pháp trình duyệt chéo dễ dàng nhất
Để tìm chính xác cùng một ngày hôm qua:
var yesterday = new Date(Date.now() - 86400000); // that is: 24 * 60 * 60 * 1000
Đó là nếu bạn muốn sử dụng miễn phí, nếu không, tôi khuyên bạn nên sử dụng http://momentjs.com
Để khái quát hóa câu hỏi và thực hiện các tính toán khác, hãy sử dụng:
var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
điều này tạo ra một đối tượng ngày mới dựa trên giá trị của "now" dưới dạng một số nguyên biểu thị epoch unix tính bằng mili giây trừ đi một ngày.
Hai ngày trước:
var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
Một tiếng trước:
var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
new Date(Date.parse(new Date()) - 86400000)
. Mặc dù tôi thích Date.now () nên có lẽ tôi sẽ thử nó. Nó sẽ tiết kiệm thêm một ngày.
Tôi sử dụng thư viện khoảnh khắc , nó rất linh hoạt và dễ sử dụng.
Trong trường hợp của bạn:
let yesterday = moment().subtract(1, 'day').toDate();
subtract
thay vìadd
new Date(new Date().setDate(new Date().getDate()-1))
//Create a date object using the current time
var now = new Date();
//Subtract one day from it
now.setDate(now.getDate()-1);
var today = new Date();
var yesterday1 = new Date(new Date().setDate(new Date().getDate() - 1));
var yesterday2 = new Date(Date.now() - 86400000);
var yesterday3 = new Date(Date.now() - 1000*60*60*24);
var yesterday4 = new Date((new Date()).valueOf() - 1000*60*60*24);
console.log("Today: "+today);
console.log("Yesterday: "+yesterday1);
console.log("Yesterday: "+yesterday2);
console.log("Yesterday: "+yesterday3);
console.log("Yesterday: "+yesterday4);
Điều này sẽ tạo ra ngày hôm qua lúc 00:00 với độ chính xác phút
var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);
d.setHours(0,0,0,0);
sẽ làm trò bịp
d.setHours(-1,0,0,0)
. Điều này sẽ trở lại vào ngày hôm qua, nhưng nó có thể không phải là thời gian bạn muốn (
Hãy thử này, làm việc cho tôi:
var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `
Điều này đã cho tôi một đối tượng ngày trở lại cho ngày hôm qua
var yesterday = new Date(); yesterday.setDate(today.GetDate() - 1)
vì vậy bạn có thể sử dụng cả ngày hôm nay và ngày hôm qua
Dưới đây là một lớp lót được sử dụng để lấy ngày hôm nay theo định dạng YYYY-MM-DD trong văn bản và xử lý bù múi giờ.
new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]
Nó có thể thay đổi đáng kể thành ngày trở lại, x ngày trở lại. Để bao gồm thời gian, vv
console.log(Date())
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('T')[0]); // "2019-11-11"
console.log(new Date(Date.now() - 1 * 86400000 - new Date().getTimezoneOffset() * 60000).toISOString().split('.')[0].replace('T',' ')); // "2019-11-11 11:11:11"
// that is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000 // this is: [dates] * 24 * 60 * 60 * 1000 - offsetinmin * 60 * 1000
Nếu bạn muốn cả hai lấy ngày hôm qua và định dạng ngày đó theo định dạng có thể đọc được của con người, hãy xem xét việc tạo một DateHelper
đối tượng tùy chỉnh trông giống như thế này:
var DateHelper = {
addDays : function(aDate, numberOfDays) {
aDate.setDate(aDate.getDate() + numberOfDays); // Add numberOfDays
return aDate; // Return the date
},
format : function format(date) {
return [
("0" + date.getDate()).slice(-2), // Get day and pad it with zeroes
("0" + (date.getMonth()+1)).slice(-2), // Get month and pad it with zeroes
date.getFullYear() // Get full year
].join('/'); // Glue the pieces together
}
}
// With this helper, you can now just use one line of readable code to :
// ---------------------------------------------------------------------
// 1. Get the current date
// 2. Subtract 1 day
// 3. Format it
// 4. Output it
// ---------------------------------------------------------------------
document.body.innerHTML = DateHelper.format(DateHelper.addDays(new Date(), -1));
(xem thêm Fiddle này )
Bạn có thể sử dụng khoảnh khắc này rất hữu ích, bạn có thể đạt được rất nhiều thứ với thư viện này.
Nhận ngày hôm qua với thời gian hiện tại
moment().subtract(1, 'days').toString()
Nhận ngày hôm qua với một ngày bắt đầu
moment().subtract(1, 'days').startOf('day').toString()
"Date.now () - 86400000" sẽ không hoạt động vào ngày kết thúc Tiết kiệm ánh sáng ban ngày (có 25 giờ ngày hôm đó)
Một tùy chọn khác là sử dụng Đóng:
var d = new goog.date.Date();
d.add(new goog.date.Interval(0, 0, -1));
getDate
trả về ngày của tháng (ví dụ: 1 - 31) nhưng thực sựsetDate(0)
đặt ngày là ngày cuối cùng của tháng trước. Điều này có hoạt động trên tất cả các trình duyệt không?