Skip to content

Instantly share code, notes, and snippets.

@montanaflynn
Created August 22, 2014 15:23
Show Gist options
  • Save montanaflynn/7235dacf2a7a68490c6c to your computer and use it in GitHub Desktop.
Save montanaflynn/7235dacf2a7a68490c6c to your computer and use it in GitHub Desktop.
Predict the future with javascript
var predictions = predict(913,new Date())
console.log(predictions)
function predict(count,date) {
var timestamp = date.getTime()
var y = date.getFullYear(), m = date.getMonth(), d = date.getDate()
var beginningOfDay = new Date(y, m, d).getTime()
var endOfDay = new Date(y, m, d+1).getTime()
var pacePerDay = count / (timestamp - beginningOfDay)
var restPerDay = pacePerDay * (endOfDay - timestamp)
var dayTotal = Math.round(count + restPerDay)
var beginningOfWeek = getStartOfWeek(new Date(y, m, d).getTime())
var endOfWeek = getEndOfWeek(new Date(y, m, d).getTime())
var pacePerWeek = count / (timestamp - beginningOfWeek)
var restPerWeek = pacePerWeek * (endOfWeek - timestamp)
var weekTotal = Math.round(count + restPerWeek)
var beginningOfMonth = new Date(y, m, 1).getTime()
var endOfMonth = new Date(y, m+1, 1).getTime()
var pacePerMonth = count / (timestamp - beginningOfMonth)
var restPerMonth = pacePerMonth * (endOfMonth - timestamp)
var monthTotal = Math.round(count + restPerMonth)
var beginningOfYear = new Date(y, 0).getTime()
var endOfYear = new Date(y+1, 0).getTime()
var pacePerYear = count / (timestamp - beginningOfYear)
var restPerYear = pacePerYear * (endOfYear - timestamp)
var yearTotal = Math.round(count + restPerYear)
predictions = {
"year" : yearTotal,
"month" : monthTotal,
"week" : weekTotal,
"day" : dayTotal
}
return predictions
}
function getStartOfWeek(timestamp) {
var date = new Date(timestamp)
if (date.getDay()) {
date.setHours(-Math.abs(date.getDay() - 1) * 24, 0, 0, 0)
} else {
date.setHours(-6 * 24, 0, 0, 0)
}
return date.getTime()
}
function getEndOfWeek(timestamp) {
var startDate = getStartOfWeek(timestamp)
var endDate = new Date(startDate)
endDate.setHours(7 * 24, 0, 0, 0)
return endDate.getTime()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment