我用下面的函数,

function datediff()
{
 var dat1 = document.getElementById('date1').value;
 alert(dat1);//i get 2010-04-01
var dat2 = document.getElementById('date2').value;
 alert(dat2);// i get 2010-04-13

var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
var diffDays = Math.abs((dat1.getTime() - dat2.getTime())/(oneDay));
alert(diffDays);
}

我得到的误差dat1.getTime()不是函数....

有帮助吗?

解决方案

这是因为你的dat1dat2变量只是字符串。

您应该分析他们获得Date对象,该格式我总是用下面的功能:

// parse a date in yyyy-mm-dd format
function parseDate(input) {
  var parts = input.match(/(\d+)/g);
  // new Date(year, month [, date [, hours[, minutes[, seconds[, ms]]]]])
  return new Date(parts[0], parts[1]-1, parts[2]); // months are 0-based
}

我使用此功能,因为 Date.parse(string) (或new Date(string))方法的的实施依赖的和的 YYYY-MM-DD 的格式将工作在现代浏览器,但的的IE浏览器,所以我更喜欢做手工

其他提示

要使用该功能/方法,需要进行类的日期的实例。

此方法总是配合使用的日期对象。

请参阅下面的代码:

var d = new Date();
d.getTime();

链接: http://www.w3schools.com/jsref/jsref_getTime.asp

对于那些谁来到这里,确实使用日期类型的变量,这里是我找到了解决办法。但是它也适用于打字原稿。

我正面临此错误,因为我尝试使用以下的方法来比较两个日期

var res = dat1.getTime() > dat2.getTime(); // or any other comparison operator

然而Im肯定我使用的日期对象,因为进出口使用angularjs与打字稿,我从类型化的API调用获得的数据。

林不知道为什么引发错误,但我认为,因为我的目标是通过JSON deserialisation创建,可能是根本就没有加入到原型getTime()方法。

解决方案

在这种情况下,重新创建基于您的日期将解决这个问题一个日期的对象。

var res = new Date(dat1).getTime() > new Date(dat2).getTime()

编辑:

我是对这个问题。类型将被强制转换为根据类型,但是他们不会被实例化。因此就会有一个串变成日期,这显然会导致运行时异常。

诀窍是,如果使用具有如日期或功能非原始只有数据接口,你将需要你的http请求之后执行的映射。

class Details {
    description: string;
    date: Date;
    score: number;
    approved: boolean;

    constructor(data: any) {
      Object.assign(this, data);
    }
}

和执行映射:

public getDetails(id: number): Promise<Details> {
    return this.http
               .get<Details>(`${this.baseUrl}/api/details/${id}`)
               .map(response => new Details(response.json()))
               .toPromise();
}

有关阵列使用:

public getDetails(): Promise<Details[]> {
    return this.http
               .get<Details>(`${this.baseUrl}/api/details`)
               .map(response => {
                   const array = JSON.parse(response.json()) as any[];
                   const details = array.map(data => new Details(data));
                   return details;
               })
               .toPromise();
}

有关信用及其它信息有关此主题按照链接

和DAT1 DAT2是字符串中的JavaScript。有对String原型没有的getTime功能。我相信你想要的Date.parse()函数: http://www.w3schools.com/jsref /jsref_parse.asp

您会使用这样的:

var date = Date.parse(dat1);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top