我使用了以下功能,
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()
不是函数....
答案 0 :(得分:43)
那是因为您的dat1
和dat2
变量只是字符串。
您应该解析它们以获取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上不,所以我更喜欢手动操作。
答案 1 :(得分:10)
要使用此功能/方法,您需要类日期的实例。
此方法始终与日期对象一起使用。
请参阅以下代码:
var d = new Date();
d.getTime();
答案 2 :(得分:7)
对于所有来到这里并确实使用Date类型变量的人来说,这是我找到的解决方案。它也适用于TypeScript。
我遇到此错误是因为我尝试使用以下方法比较两个日期
var res = dat1.getTime() > dat2.getTime(); // or any other comparison operator
但是我确定我使用的是Date对象,因为我将angularjs与typescript一起使用,并且我从类型化的API调用中获取了数据。
我不确定为什么会引发错误,但是我认为由于我的对象是通过JSON反序列化创建的,因此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();
}
有关此主题的credits and further information,请点击链接。
答案 3 :(得分:4)
dat1和dat2是JavaScript中的字符串。 String原型上没有getTime函数。我相信你想要Date.parse()函数:http://www.w3schools.com/jsref/jsref_parse.asp
您可以这样使用它:
var date = Date.parse(dat1);