daG*_*GUY 11 javascript datetime date momentjs
我需要按照创建的日期在我的网络应用中对一组项目进行分组.
每个项目都有一个确切的时间戳,例如1417628530199.我正在使用Moment.js及其" 从现在起的时间 "功能将这些原始时间戳转换为可读的日期,例如2 Days Ago.然后,我想将可读日期用作在同一日期创建的一组项目的标题.
问题是原始时间戳太具体了 - 在同一天创建的两个项目相隔一分钟,每个项目都有一个唯一的时间戳.所以我得到一个标题,2 Days Ago下面是第一个项目,然后2 Days Ago是下面第二个项目的另一个标题,等等.
将原始时间戳舍入到最近日期的最佳方法是什么,以便在同一日期创建的任何项目将具有完全相同的时间戳,从而可以组合在一起?
juv*_*ian 24
那么,使用js你可以做到:
var d = new Date(1417628530199);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
Run Code Online (Sandbox Code Playgroud)
编辑:
检查了几种方法后,这个方法似乎更快:
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);
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里检查速度的差异:http://jsfiddle.net/juvian/3aqmhn2h/
小智 11
这是一种在没有依赖项的情况下仅在一行中获取日期的干净方法:
let d = new Date().setHours(0, 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
Top*_*gio 10
使用Moment.js,您可以使用以下代码将所有内容舍入到一天的开头:
moment().startOf('day').toString();
// -> Prints out "Fri Dec 05 2014 00:00:00 GMT-0800"
Run Code Online (Sandbox Code Playgroud)
您可以startOf()在文档中阅读更多相关信息.
只需使用年、月和日期从现有日期构造一个新日期。添加半天以确保它是最接近的日期。
var offset = new Date(Date.now() +43200000);
var rounded = new Date(offset .getFullYear(),offset .getMonth(),offset .getDate());
console.log(new Date());
console.log(rounded);Run Code Online (Sandbox Code Playgroud)
由于这似乎占用空间很小,因此扩展原型以将其包含在日期“类”中也很有用。
Date.prototype.round = function(){
var dateObj = new Date(+this+43200000);
return new Date(dateObj.getFullYear(), dateObj.getMonth(), dateObj.getDate());
};
console.log(new Date().round());Run Code Online (Sandbox Code Playgroud)
最小化:
Date.prototype.round = function(){var d = new Date(+this+43200000);return new Date(d.getFullYear(), d.getMonth(), d.getDate());};
Run Code Online (Sandbox Code Playgroud)
尝试这个:
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 );
Run Code Online (Sandbox Code Playgroud)
http://jsfiddle.net/cdn5rvck/4/
| 归档时间: |
|
| 查看次数: |
14729 次 |
| 最近记录: |