2010-10-15 3 views

ответ

2

Как насчет этого от here?

function days_between(date1, date2) { 

    // The number of milliseconds in one day 
    var ONE_DAY = 1000 * 60 * 60 * 24 

    // Convert both dates to milliseconds 
    var date1_ms = date1.getTime() 
    var date2_ms = date2.getTime() 

    // Calculate the difference in milliseconds 
    var difference_ms = Math.abs(date1_ms - date2_ms) 

    // Convert back to days and return 
    return Math.round(difference_ms/ONE_DAY) 

} 
+0

Но моя' date2' на самом деле такая строка, как '2010-11-9' .. – ollydbg

0

Это не точно уместна, но вы можете позвонить getTime() из Date, например, чтобы получить число миллисекунд с начала эпохи. Вычтите два из них и разделите их на количество миллисекунд в день.

Если вы хотите, вы можете взять даты назад к началу своих дней явно установив часы, минуты и секунды до нуля:

function startOfDay(d) { 
    d.setHours(0); d.setMinutes(0); d.setSeconds(0); d.setMilliseconds(0); 
    return d; 
} 

var startOfToday = startOfDay(new Date()); 
+0

Да, но у вас может быть разница в 1 день с реальной разницей ... – romaintaz

+0

Нет, я не хочу заботиться о часах, только днях. – ollydbg

+0

Ну тогда отрубайте дробную часть результата. – Pointy

0
Math.abs(new Date() - Date.parse("Nov 9, 2010"))/(60*60*24)/1000 

возвращается:

24.786491909722223 
0
function daysTo(from, to){ 
    // to and from may be 
    // strings in the form'yyyy-mm-dd' or 'yyyy-m-d' 
    // split the strings on dashes and possible leading 0, 
    // to avoid '08' becoming octal '10' 

    to= to.split(/\-0?/); 
    to= new Date(+to[0], to[1]-1, +to[2]); 

    from= from.split(/\-0?/); 
    from= new Date(+from[0], from[1]-1, +from[2]); 

    return Math.round((to-from)/86400000)); 
} 

daysTo ('2010-9-10', '2011-9-10') // или daysTo ('2010-09-10', '2011-09-10')

/* Возвращаемое значение: (номер) */

Округление результата сглаживает Daylight Savings коррекций.

Если вы создаете новую дату без указания времени, дата будет установлена ​​в полночное местное время.

Объекты вычитания даты преобразуют их в миллисекунды - вам не нужно использовать getTime().

Смежные вопросы