date.getDate 不是函数打字稿

Posted

技术标签:

【中文标题】date.getDate 不是函数打字稿【英文标题】:date.getDate is not a function Typescript 【发布时间】:2019-11-22 06:25:28 【问题描述】:

我有 3 个输入控件,两个日期类型,一个是数字,我想做的是从第一个控件获取日期,而不是。来自其他控件的天数将它们都添加并分配给打字稿中的第三个日期控件。但我给我的错误是我的代码:

activeFrom: Date;
activeNoDays: number;

    //UpdateExpiry Function is called by textbox event
        updateExpiry=():void =>
             this.gDetailDS = this.gDetailForm.value;
            console.log("Expiry days:"+this.gDetailDS.activeNoDays);
            console.log (this.addDays(this.gDetailDS.activeFrom,this.gDetailDS.activeNoDays))
          

          addDays(date: Date, days: number): Date 
            console.log('adding ' + days + ' days');
            console.log(date);
            date.setDate(date.getDate() + days);
            console.log(date);
            return date;
          

这里是 html 控件:

<input
     id="txtActivateFrom"
     type ="date"
     min="rdMinDate"
     formControlName="activeFrom"
     class="form-control"
     value=" this.gDetailDS.activeFrom | date:'yyyy-MM-dd' "
     displayFormat="yyyy-MM-dd"
     useValueAsDate />

<input  type="number"
        formControlName="activeNoDays" class="form-control"
        (change)="updateExpiry()"/>

控制台消息:

Expiry days:25
adding 25 days
2019-07-12

我已经尝试过,但仍然遇到这个问题:

ERROR TypeError: date.getDate is not a function

link: screenshot of error appear on browser console

【问题讨论】:

来自***.com/a/45485198/8155 "你可能缺少类型定义" typeof this.gDetailDS.activeFrom 返回什么?因为我怀疑它是一个字符串。 请做一个控制台日志来确认this.gDetailDS.activeFrom实际上是一个日期 你已经有一个console.log(date),它是什么意思?看起来像Date 2019-07-12T13:24:29.059Z 吗? 【参考方案1】:

在从 Web API 获取日期时,我曾经遇到过类似的问题。我通过创建一个新的 Date 对象来解决它。

所以你的函数调用可能如下所示:

this.addDays(new Date(this.gDetailDS.activeFrom),this.gDetailDS.activeNoDays)

【讨论】:

虽然这是一个正确的答案,但实际上并没有解释原因。有时,当我们对日期进行操作时,它们会被转换回 javascript 中的数字。我们必须确保在将它们传递给另一个函数之前将它们转换回日期【参考方案2】:

您需要先创建 Date 对象,然后再尝试将其传递给 addDays 函数。 Input.valuetype="date" 将返回字符串表示形式,而不是日期对象。

如果这是通过 JSON 通过网络接收的,您在执行 JSON.Parse() 时仍需要创建日期对象

小提琴:https://jsfiddle.net/o7y6u2zL/4/

let date = document.getElementById("start");
console.log(date.value);
console.log(typeof date.value);
let realDateObject = new Date(date.value);
console.log(typeof realDateObject)
<label for="start">Start date:</label>

<input type="date" id="start" name="trip-start"
       value="2018-07-22"
       min="2018-01-01" max="2018-12-31">

【讨论】:

以上是关于date.getDate 不是函数打字稿的主要内容,如果未能解决你的问题,请参考以下文章

模型中的打字稿方法给出错误“不是函数”[重复]

反应打字稿测试TypeError:MutationObserver不是构造函数

从打字稿中的地图检索值时,map.get 不是函数

打字稿:强制默认通用类型为“any”而不是“”

创建一个返回反应组件类的打字稿函数

编译打字稿而不转译异步函数