我正在尝试填充两个日期输入字段,一个是今天的日期,另一个是30天前(上个月)的日期。
我在控制台中收到错误:priordate.getDate is not a function
这是我的代码,不知道我做错了什么:
//today's date
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1;//January is 0, so always add + 1
var yyyy = today.getFullYear();
if(dd<10){dd='0'+dd};
if(mm<10){mm='0'+mm};
today = yyyy+'-'+mm+'-'+dd;
//30 days ago
var beforedate = new Date();
var priordate = new Date().setDate(beforedate.getDate()-30);
var dd2 = priordate.getDate();
var mm2 = priordate.getMonth()+1;//January is 0, so always add + 1
var yyyy2 = priordate.getFullYear();
if(dd2<10){dd2='0'+dd2};
if(mm2<10){mm2='0'+mm2};
var datefrommonthago = yyyy2+'-'+mm2+'-'+dd2;
// Set inputs with the date variables:
$("#fromdate").val(datefrommonthago);
$("#todate").val(today);
答案 0 :(得分:3)
这是因为setDate()
returns a number,而不是Date
对象。
在任何情况下,我强烈建议您使用momentjs
或date-fns
,因为JavaScript中的内部Date
对象会以各种方式被破坏。请参阅此演讲:https://www.youtube.com/watch?v=aVuor-VAWTI
答案 1 :(得分:2)
你会想要使用:
var priordate = new Date(new Date().setDate(beforedate.getDate()-30));
如果你想在一条线上。使用:
new Date().setDate(beforedate.getDate()-30);
你返回自纪元以来的时间(一个数字,而不是一个日期),并将其分配给priordate
,但它不再是Date
,所以不会拥有getDate
功能。
答案 2 :(得分:1)
改变这个:
var priordate = new Date().setDate(beforedate.getDate()-30);
到此:
var priordate = new Date();
priordate.setDate(beforedate.getDate()-30);