Skip to content

Instantly share code, notes, and snippets.

@pagetronic
Created May 16, 2018 16:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pagetronic/042d1d77b68d8281962f0df8ef87f993 to your computer and use it in GitHub Desktop.
Save pagetronic/042d1d77b68d8281962f0df8ef87f993 to your computer and use it in GitHub Desktop.
Javascript function to display date in "since" format
function since(from, level) {
var durationInit = sys.time - new Date(from).getTime();
var DAYS_PER_YEAR = 365.24225;
var M_PER_SECOND = 1000;
var M_PER_MINUTE = 60 * M_PER_SECOND;
var M_PER_HOUR = 60 * M_PER_MINUTE;
var M_PER_DAY = 24 * M_PER_HOUR;
var M_PER_WEEKS = 7 * M_PER_DAY;
var M_PER_MONTH = Math.floor((DAYS_PER_YEAR / 12) * M_PER_DAY);
var M_PER_YEAR = Math.floor(DAYS_PER_YEAR * M_PER_DAY);
if (durationInit < 60000 && durationInit > -60000) {
return getLang(durationInit > 0 ? "JUST_NOW" : "IMMEDIATELY");
}
var durationMillis = (durationInit > 0) ? durationInit : -durationInit;
var years = Math.floor(durationMillis / M_PER_YEAR);
durationMillis = durationMillis - (years * M_PER_YEAR);
var months = Math.floor(durationMillis / M_PER_MONTH);
durationMillis = durationMillis - (months * M_PER_MONTH);
var weeks = Math.floor(durationMillis / M_PER_WEEKS);
durationMillis = durationMillis - (weeks * M_PER_WEEKS);
var days = Math.floor(durationMillis / M_PER_DAY);
durationMillis = durationMillis - (days * M_PER_DAY);
var hours = Math.floor(durationMillis / M_PER_HOUR);
durationMillis = durationMillis - (hours * M_PER_HOUR);
var minutes = Math.floor(durationMillis / M_PER_MINUTE);
durationMillis = durationMillis - (minutes * M_PER_MINUTE);
var seconds = Math.floor(durationMillis / M_PER_SECOND);
durationMillis = durationMillis - (seconds * M_PER_SECOND);
var space_num = " ";
var space = "";
var since = "";
since += getLang(durationInit > 0 ? "AGO_BEFORE" : "IN_BEFORE");
for (var i = 0; i < 6 && level > 0; i++) {
var effect = false;
if (years > 0) {
since += space + years + space_num + (years > 1 ? getLang("YEARS") : getLang("YEAR"));
years = 0;
effect = true;
level--;
} else if (months > 0) {
since += space + months + space_num + (months > 1 ? getLang("MONTHS") : getLang("MONTH"));
months = 0;
effect = true;
level--;
} else if (weeks > 0) {
since += space + weeks + space_num + (weeks > 1 ? getLang("WEEKS") : getLang("WEEK"));
weeks = 0;
effect = true;
level--;
} else if (days > 0) {
since += space + days + space_num + (days > 1 ? getLang("DAYS") : getLang("DAY"));
days = 0;
effect = true;
level--;
} else if (hours > 0) {
since += space + hours + space_num + (hours > 1 ? getLang("HOURS") : getLang("HOUR"));
hours = 0;
effect = true;
level--;
} else if (minutes > 0) {
since += space + minutes + space_num + (minutes > 1 ? getLang("MINUTES") : getLang("MINUTE"));
minutes = 0;
effect = true;
level--;
} else if (seconds > 0) {
since += space + seconds + space_num + (seconds > 1 ? getLang("SECONDS") : getLang("SECOND"));
seconds = 0;
effect = true;
level--;
}
if (effect) {
if (level == 1) {
space = " " + getLang("AND") + " ";
} else {
space = ", ";
}
}
}
return since + getLang(durationInit > 0 ? "AGO_AFTER" : "IN_AFTER");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment