I need to group a bunch of items in my web app by date created.
Each item has an exact timestamp, e.g. 1417628530199. I\'m using Moment.js and its \"tim
Using Moment.js, you can use the following code to round everything to the beginning of the day:
moment().startOf('day').toString();
// -> Prints out "Fri Dec 05 2014 00:00:00 GMT-0800"
You can read more about startOf() in the docs.
Here is a clean way to get just the date in one line with no dependencies:
let d = new Date().setHours(0, 0, 0, 0);
Just construct a new Date from the existing one using only the year, month, and date. Add half a day to ensure that it is the closest date.
var offset = new Date(Date.now() +43200000);
var rounded = new Date(offset .getFullYear(),offset .getMonth(),offset .getDate());
console.log(new Date());
console.log(rounded);
Since this seems to have a small footprint, it can also be useful to extend the prototype to include it in the Date "class".
Date.prototype.round = function(){
var dateObj = new Date(+this+43200000);
return new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate());
};
console.log(new Date().round());
Minimized:
Date.prototype.round = function(){var d = new Date(+this+43200000);return new Date(d.getFullYear(), d.getMonth(), d.getDate());};
Try this:
Date.prototype.formatDate = function() {
var yyyy = this.getFullYear().toString();
var mm = (this.getMonth()+1).toString();
var dd = this.getDate().toString();
return yyyy + (mm[1]?mm:"0"+mm[0]) + (dd[1]?dd:"0"+dd[0]);
};
var utcSeconds = 1417903843000,
d = new Date(0);
d.setUTCSeconds(Math.round( utcSeconds / 1000.0));
var myTime = (function(){
var theTime = moment(d.formatDate(), 'YYYYMMDD').startOf('day').fromNow();
if(theTime.match('hours ago')){
return 'Today';
}
return theTime;
})();
alert( myTime );
http://jsfiddle.net/cdn5rvck/4/
Well, using js you can do:
var d = new Date(1417628530199);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
Edit:
After checking several methods, this one seems to be the faster:
function roundDate(timeStamp){
timeStamp -= timeStamp % (24 * 60 * 60 * 1000);//subtract amount of time since midnight
timeStamp += new Date().getTimezoneOffset() * 60 * 1000;//add on the timezone offset
return new Date(timeStamp);
}
You can check difference in speed here: http://jsfiddle.net/juvian/3aqmhn2h/
function roundDownDate(date) {
if (typeof date !== "object" || !date.getUTCMilliseconds) {
throw Error("Arg must be a Date object.");
}
var offsetMs = date.getTimezoneOffset() * 60 * 1000,
oneDayMs = 24 * 60 * 60 * 1000;
return new Date(Math.floor((date.getTime() - offsetMs) / oneDayMs) * oneDayMs + offsetMs);
};
This should work and is pretty fast.