如何在JavaScript中计算昨天作为日期?
当前回答
这将产生昨天零点的分钟精确
var d = new Date();
d.setDate(d.getDate() - 1);
d.setTime(d.getTime()-d.getHours()*3600*1000-d.getMinutes()*60*1000);
其他回答
var today = new Date(); var yesterday1 =新日期(新日期()。setDate(new Date().getDate() - 1)); var yesterday2 =新的日期(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(“:“今天+); 昨天console.log(“:”+ yesterday1); 昨天console.log(“:”+ yesterday2); 昨天console.log(“:”+ yesterday3); 昨天console.log(“:”+ yesterday4);
试一试,对我有用:
var today = new Date();
var yesterday = new Date(today.setDate(today.getDate() - 1)); `
这让我得到了一个日期对象回来为昨天
为了概括问题并使用其他差异计算:
var yesterday = new Date((new Date()).valueOf() - 1000*60*60*24);
这将创建一个基于“now”值的新date对象,该值为整数,表示Unix epoch(单位为毫秒减去一天)。
两天前:
var twoDaysAgo = new Date((new Date()).valueOf() - 1000*60*60*24*2);
一小时前:
var oneHourAgo = new Date((new Date()).valueOf() - 1000*60*60);
我想要这样的答案:
const yesterday = d => new Date(d.setDate(d.getDate() - 1));
问题是它突变了d,所以让我们把突变藏在里面。
const yesterday = (date) => {
const dateCopy = new Date(date);
return new Date(dateCopy.setDate(dateCopy.getDate() - 1));
}
我们可以将其分解为一行表达式,但它变得有点难以阅读:
const yesterday = d => new Date(new Date(d).setDate(d.getDate() - 1));
我将其扩展为addDays和addMonths函数:
/** * Add (or subtract) days from a date * * @param {Number} days * @returns {Function} Date => Date + days */ const addDays = (days) => (date) => new Date(new Date(date).setDate(date.getDate() + days)); /** * Add (or subtract) months from a date * * @param {Number} months * @returns {Function} Date => Date + months */ const addMonths = (months) => (date) => new Date(new Date(date).setMonth(date.getMonth() + months)); // We can recreate the yesterday function: const yesterday = addDays(-1) // note that `now` doesn't get mutated const now = new Date(); console.log({ now, yesterday: yesterday(now) }) const lastMonth = addMonths(-1)(now); console.log({ now, lastMonth }) .as-console-wrapper { max-height: 100% !important; }
但在这一点上,你可能想开始使用date-fns addDays。
[2022年4月]:下面是一个扩展Date原型的代码片段(不污染全局命名空间)
[edit sept 2020]:一个包含之前答案的片段,并添加了一个箭头函数。
// a (not very efficient) oneliner let yesterday = new Date(new Date().setDate(new Date().getDate()-1)); console.log(`Yesterday (oneliner)\n${yesterday}`); // a function call yesterday = ( function(){this.setDate(this.getDate()-1); return this} ) .call(new Date); console.log(`Yesterday (function call)\n${yesterday}`); // an iife (immediately invoked function expression) yesterday = function(d){ d.setDate(d.getDate()-1); return d}(new Date); console.log(`Yesterday (iife)\n${yesterday}`); // oneliner using es6 arrow function yesterday = ( d => new Date(d.setDate(d.getDate()-1)) )(new Date); console.log(`Yesterday (es6 arrow iife)\n${yesterday}`); // use a method const getYesterday = (dateOnly = false) => { let d = new Date(); d.setDate(d.getDate() - 1); return dateOnly ? new Date(d).toDateString() : d; }; console.log(`Yesterday (method)\n${getYesterday()}`); console.log(`Yesterday (method dateOnly=true)\n${getYesterday(true)}`); // use Date.now console.log(`Yesterday, using Date.now\n${new Date(Date.now() - 864e5)}`); .as-console-wrapper { max-height: 100% !important; }