【问题标题】:Javascript get date 30 days ago [duplicate]Javascript获取30天前的日期[重复]
【发布时间】:2017-10-23 07:03:38
【问题描述】:

我正在尝试填充两个日期输入字段,一个包含今天的日期,一个包含 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);

【问题讨论】:

  • 您是否尝试过使用moment.js 或者那不是一个选项?
  • 我使用 phonegap 的目的是让它成为一个应用程序,所以如果可能的话,我想避免使用外部库。
  • setDate()的返回值不是Date,所以需要拆分这一行:var priordate = new Date().setDate(beforedate.getDate()-30);

标签: javascript jquery date datetime


【解决方案1】:

您将改为使用:

var priordate = new Date(new Date().setDate(beforedate.getDate()-30));

如果你想把它放在一行上。通过使用:

new Date().setDate(beforedate.getDate()-30);

您返回自纪元以来的时间(一个数字,而不是日期)并将其分配给priordate,但它不再是Date,因此没有@987654325 @函数。

【讨论】:

    【解决方案2】:

    这是因为 setDate() returns a number,而不是 Date 对象。

    在任何情况下,我都强烈建议使用momentjs 或date-fns,因为JavaScript 中的内部Date 对象以各种方式损坏。看这个演讲:https://www.youtube.com/watch?v=aVuor-VAWTI

    【讨论】:

    • 我的印象是,在使用 cordova/phonegap 进行开发时,只能使用 javascript。我一定会检查该视频,并可能考虑使用 moment.js。感谢您的意见!
    【解决方案3】:

    改变这个:

    var priordate = new Date().setDate(beforedate.getDate()-30);
    

    到这里:

    var priordate = new Date();
    priordate.setDate(beforedate.getDate()-30);
    

    【讨论】:

    • 啊哈!我知道我哪里出错了。非常感谢,我现在明白了:)
    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 2020-04-12
    • 2017-07-06
    • 1970-01-01
    • 2014-05-29
    • 2012-02-09
    • 2017-12-03
    相关资源
    最近更新 更多