Why javascript getTime() is not a function?

前端 未结 4 1705
夕颜
夕颜 2020-12-29 18:31

I used the following function,

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


        
相关标签:
4条回答
  • 2020-12-29 18:57

    For all those who came here and did indeed use Date typed Variables, here is the solution I found. It does also apply to TypeScript.

    I was facing this error because I tried to compare two dates using the following Method

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

    However Im sure I used a Date object, because Im using angularjs with typescript, and I got the data from a typed API call.

    Im not sure why the error is raised, but I assume that because my Object was created by JSON deserialisation, possibly the getTime() method was simply not added to the prototype.

    Solution

    In this case, recreating a date-Object based on your dates will fix the issue.

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

    Edit:

    I was right about this. Types will be cast to the according type but they wont be instanciated. Hence there will be a string cast to a date, which will obviously result in a runtime exception.

    The trick is, if you use interfaces with non primitive only data such as dates or functions, you will need to perform a mapping after your http request.

    class Details {
        description: string;
        date: Date;
        score: number;
        approved: boolean;
    
        constructor(data: any) {
          Object.assign(this, data);
        }
    }
    

    and to perform the mapping:

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

    for arrays use:

    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();
    }
    

    For credits and further information about this topic follow the link.

    0 讨论(0)
  • 2020-12-29 19:08

    To use this function/method,you need an instance of the class Date .

    This method is always used in conjunction with a Date object.

    See the code below :

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

    Link : http://www.w3schools.com/jsref/jsref_getTime.asp

    0 讨论(0)
  • 2020-12-29 19:10

    dat1 and dat2 are Strings in JavaScript. There is no getTime function on the String prototype. I believe you want the Date.parse() function: http://www.w3schools.com/jsref/jsref_parse.asp

    You would use it like this:

    var date = Date.parse(dat1);
    
    0 讨论(0)
  • That's because your dat1 and dat2 variables are just strings.

    You should parse them to get a Date object, for that format I always use the following function:

    // 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
    }
    

    I use this function because the Date.parse(string) (or new Date(string)) method is implementation dependent, and the yyyy-MM-dd format will work on modern browser but not on IE, so I prefer doing it manually.

    0 讨论(0)
提交回复
热议问题