将时间戳四舍五入到最接近的日期

新手上路,请多包涵

我需要按创建日期对我的网络应用程序中的一堆项目进行分组。

每个项目都有一个确切的时间戳,例如 1417628530199 。我正在使用 Moment.js 及其“ 从现在开始的时间”功能将这些原始时间戳转换为易于阅读的日期,例如 2 Days Ago 。然后我想将可读日期用作同一日期创建的一组项目的标题。

问题在于原始时间戳过于具体——在同一日期创建但相隔一分钟的两个项目将各自具有唯一的时间戳。所以我得到了 2 Days Ago 标题,下面是第一项,然后是 2 Days Ago 的另一个标题,下面是第二项,等等。

将原始时间戳四舍五入到最近日期的最佳方法是什么,以便在同一日期创建的任何项目都将具有完全相同的时间戳,从而可以组合在一起?

原文由 daGUY 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 348
2 个回答

尝试这个:

 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/

原文由 Joe L. 发布,翻译遵循 CC BY-SA 3.0 许可协议

那么,使用 js 你可以这样做:

 var d = new Date(1417628530199);
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);

更短的写法是 d.setHours(0, 0, 0, 0);

原文由 juvian 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题