2016-03-30 2 views
1

Я хочу рассчитать, соответствует ли данная дата сегодня или вчера. На данный момент я могу проверить только, если это 24 часа или 48 часов. Как я могу проверить дату?Как рассчитать, если указанная дата является датой сегодняшнего дня или датой вчерашнего дня?

var date_given = new Date(Date.parse(item.date)); 

var today = new Date(); 
var diff = (Date.parse(today) - Date.parse(date_given)) /(1000*24*60*60); 

if (diff < 1) { 
    return "today"; 
} else if (diff < 2) { 
    return "yesterday"; 
} 
+3

посмотреть на http://stackoverflow.com/questions/492994/compare-two-dates-with-javascript – Phoenix

+2

исследовать с помощью moment.js - очень полезно реализовать данные и функции времени – gavgrif

+1

@Phoenix вчера может быть второй или 24 часа назад, как это проверить? – vuvu

ответ

2

Вы можете использовать эти функции, чтобы добавить любое количество дней (отрицательные числа, а) и определить, если дата часть даты равна:

var msInDay = 86400000; 

function addDays(date, add) { 
    return new Date(date.valueOf() + (msInDay * add)); 
} 

function isSameDay(a, b) { 
    return a.getFullYear() == b.getFullYear() && 
     a.getMonth() == b.getMonth() && 
     a.getDate() == b.getDate(); 
} 

Это позволит вам получить вчера:

var today = new Date(); 
var yesterday = addDays(today, -1); 

Теперь сравните:

var otherDate = addDays(today, -1); 
var isYesterday = isSameDay(otherDate, yesterday); 
var isToday = isSameDay(otherDate, today); 
+0

[getDay()] (http://www.w3schools.com/jsref/jsref_getday.asp) верните индекс недели недели, а не дату дня, если две даты имеют вторник с индексом недели == 2, вы не можете отличить их, лучше использовать getDate() – vuvu

+0

Да, спасибо @vuvu. Глупая ошибка - скорректированный ответ – DvS

2

Вы могли бы сделать это старая школа, как это:

var dateTime = function(args) { 
    args = args || [0,0,0,0] 
    var d = new Date(Date.now()) 
    d.setUTCHours(args[0]) 
    d.setUTCMinutes(args[1]) 
    d.setUTCSeconds(args[2]) 
    d.setUTCMilliseconds(args[3]) 
    return d; 
} 

var isItTodayOrYesterday = function(given) { 
    var start = dateTime(), 
     end = dateTime([23,59,59,999]) 
    return given < start ? 'yesterday' : given < end ? 'today' : "its the futur man" 
} 

var futur = new Date('December 17, 2018 03:24:00'), 
    today = new Date(), 
    past = new Date('December 17, 1995 03:24:00'); 

console.log(isItTodayOrYesterday(past)) // yesterday 
console.log(isItTodayOrYesterday(today)) // today 
console.log(isItTodayOrYesterday(futur)) // its the futur man 

См this fiddle

Редактировать

За свой комментарий, вот версия, которая заботится о yesterday случае:

var dateTime = function(args) { 
    var time = (args && args.time) ? args.time : [0,0,0,0], 
     date = new Date((args && args.date) || Date.now()) 

    date.setUTCHours(time[0]) 
    date.setUTCMinutes(time[1]) 
    date.setUTCSeconds(time[2]) 
    date.setUTCMilliseconds(time[3]) 
    return date; 
} 

console.clear() 

var isItTodayOrYesterday = function(given) { 
    var start  = dateTime(), 
     yesterday = dateTime({date: new Date(new Date().valueOf() - 3600 * 24 * 1000)}), 
     end  = dateTime({time: [23,59,59,999]}) 

    return given < yesterday ? "we're stuck in the past" 
    : given < start ? 'yesterday' 
     : given < end ? 'today' 
     : "its the futur man" 
} 

var futur  = new Date('December 17, 2018 03:24:00'), 
    today  = new Date(), 
    past  = new Date('December 17, 1995 03:24:00'), 
    yesterday = dateTime({ 
     date: new Date(new Date().valueOf() - 3600 * 24 * 1000), 
     time: [12,21,30,0] 
    }); 

console.log(isItTodayOrYesterday(past)) // "we're stuck in the past" 
console.log(isItTodayOrYesterday(yesterday)) // yesterday 
console.log(isItTodayOrYesterday(today)) // today 
console.log(isItTodayOrYesterday(futur)) // its the futur man 

См. the updated fiddle

+0

, но 17 декабря 1995 года не вчера, вчера должен быть возвращен только 29 марта 2016 года – vuvu

+0

См. Отредактированную версию, которая позаботится о вчерашнем случае – cl3m

1

Если вы хотите проверить, действительно ли данная дата сегодня или вчера, просто попробуйте эту функцию. Вам не нужно писать очень длинный фрагмент кода:

function checkTodayYesterday(givenDate) { 
    var today = new Date(); 
    var yesterday = new Date(); 
    yesterday.setDate(yesterday.getDate() - 1); 
    if(today.toDateString() === givenDate.toDateString()) { 
     console.log('givenDate is today'); 
    } else if(yesterday.toDateString() === givenDate.toDateString()) { 
     console.log('givenDate is yesterday'); 
    } else { 
     console.log('givenDate is other than today or yesterday'); 
    } 
} 

Счастливое кодирование! :)