JavaScriptカスタムDateDiff関数(すべてのブラウザに対応)

3378 ワード

 
  
<br>function NewDate(str) { <br>str = str.split('-'); <br>var date = new Date(); <br>date.setUTCFullYear(str[0], str[1] - 1, str[2]); <br>date.setUTCHours(0, 0, 0, 0); <br>return date; <br>} <br>function TimeCom(dateValue) { <br>var newCom; <br> <br>if (dateValue == "") { <br>newCom = new Date(); <br>} else { <br>newCom = NewDate(dateValue); <br>} <br>this.year = newCom.getYear(); <br>this.month = newCom.getMonth() + 1; <br>this.day = newCom.getDate(); <br>this.hour = newCom.getHours(); <br>this.minute = newCom.getMinutes(); <br>this.second = newCom.getSeconds(); <br>this.msecond = newCom.getMilliseconds(); <br>this.week = newCom.getDay(); <br>} <br>function DateDiff(interval, date1, date2) { <br>var TimeCom1 = new TimeCom(date1); <br>var TimeCom2 = new TimeCom(date2); <br>var result; <br>switch (String(interval).toLowerCase()) { <br>case "y": <br>case "year": <br>result = TimeCom1.year - TimeCom2.year; <br>break; <br>case "m": <br>case "month": <br>result = (TimeCom1.year - TimeCom2.year) * 12 + (TimeCom1.month - TimeCom2.month); <br>break; <br>case "d": <br>case "day": <br>result = Math.round((Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day)) / (1000 * 60 * 60 * 24)); <br>break; <br>case "h": <br>case "hour": <br>result = Math.round((Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day, TimeCom1.hour) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day, TimeCom2.hour)) / (1000 * 60 * 60)); <br>break; <br>case "min": <br>case "minute": <br>result = Math.round((Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day, TimeCom1.hour, TimeCom1.minute) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day, TimeCom2.hour, TimeCom2.minute)) / (1000 * 60)); <br>break; <br>case "s": <br>case "second": <br>result = Math.round((Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day, TimeCom1.hour, TimeCom1.minute, TimeCom1.second) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day, TimeCom2.hour, TimeCom2.minute, TimeCom2.second)) / 1000); <br>break; <br>case "ms": <br>case "msecond": <br>result = Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day, TimeCom1.hour, TimeCom1.minute, TimeCom1.second, TimeCom1.msecond) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day, TimeCom2.hour, TimeCom2.minute, TimeCom2.second, TimeCom1.msecond); <br>break; <br>case "w": <br>case "week": <br>result = Math.round((Date.UTC(TimeCom1.year, TimeCom1.month - 1, TimeCom1.day) - Date.UTC(TimeCom2.year, TimeCom2.month - 1, TimeCom2.day)) / (1000 * 60 * 60 * 24)) % 7; <br>break; <br>default: <br>result = "invalid"; <br>} <br>return (result); <br>} <br>