试图通过减去两个不同的日期来获得日期

时间:2019-02-20 13:10:16

标签: javascript reactjs

我正试图弄清楚如何减去两个不同的日期来获得余数。根据我的Google搜索,这似乎应该很简单,但是我的代码无法正常工作。

const options = { year: 'numeric', month: 'numeric', day: 'numeric' };
let today = new Date();
today = today.toLocaleDateString('en-US', options); // '2/20/2019'
dueDate = new Date(dueDate[0]);
dueDate = dueDate.toLocaleDateString('en-US', options); // '12/15/2019'
daysLeft = today.setDate(today.setDate() - dueDate); // Being declared as a let outside the scope block

我收到的错误消息是:Uncaught (in promise) TypeError: today.setDate is not a function

enter image description here

更新

可能的重复答案几乎帮了我大忙,但并没有考虑多年,所以2/20/2019 - 2/1/2001输出19,这是不正确的。

3 个答案:

答案 0 :(得分:3)

您可以使用直接数学。

let today = new Date();
let dueDate = new Date('12/15/2019');
let difference = Math.abs(Math.round((today.getTime()-dueDate.getTime())/1000/24/60/60));
console.log(difference);

这样,我们得到的差值以毫秒为单位,除以1000得到秒数,除以60得到分钟数,再除以60得到小时数,最后除以24得到天数差。

答案 1 :(得分:1)

主要问题是,您将日期today解析为字符串,然后在其上调用方法,这自然会失败。您应该将today.toLocaleDateString('en-US', options)的值(它是一个字符串)分配给另一个变量,然后对实际上具有Date对象的变量使用方法。假设其余代码都可以。

答案 2 :(得分:1)

  

MomentJS 是您的朋友!您可以按照以下方式简单地使用 diff() -

moment.locale('en-US');		 // setting locale
var today = moment();		 // current date
var dueDate = moment('12/15/2019', "MM/DD/YYYY");	// due date
console.log(Math.abs(dueDate.diff(today, 'days')));	// difference in days, possible values are months, years...
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

  • 注意: Math.abs() 如果提供了历史日期,则避免使用负值!