V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sensui7
V2EX  ›  问与答

关于 V2 api 帖子创建时间, 我这见鬼了

  •  
  •   sensui7 · 2017-03-18 19:07:20 +08:00 · 1266 次点击
    这是一个创建于 2836 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我获取的热门帖子, 转换后, 创建时间都是"47 年以前" 比如"希望 v2 不要禁止被降权童鞋的回复提醒" 这个帖子,

    这是我转换函数, 网上的, 我也没看出有什么问题

    function getDateDiff (dateTimeStamp) {
      var minute = 1000 * 60;
      var hour = minute * 60;
      var day = hour * 24;
      var halfamonth = day * 15;
      var month = day * 30;
      var year = day * 365;
      var now = new Date().getTime();
      var diffValue = now - dateTimeStamp;
      if(diffValue < 0){
        //非法操作
        return '数据出错';
      }
      var yearC = diffValue / year;
      var monthC = diffValue / month;
      var weekC = diffValue / (7 * day);
      var dayC = diffValue / day;
      var hourC = diffValue / hour;
      var minC = diffValue / minute;
      if(yearC >= 1){
        result = parseInt(yearC) + '年以前';
      }else if(monthC >= 1){
        result = parseInt(monthC) + '个月前';
      }else if(weekC >= 1){
        result = parseInt(weekC) + '星期前';
      }else if(dayC >= 1){
        result = parseInt(dayC) + '天前';
      }else if(hourC >= 1){
        result = parseInt(hourC) + '小时前';
      }else if(minC >= 5){
        result = parseInt(minC) + '分钟前';
      }else{
        result = '刚刚发表';
      }
      return result;
    }
    
    

    这是调用

              v2exHot: self.data.v2exHot.concat(res.data.map(function (item) {
              item.created = util.getDateDiff(new Date(item.created));
              return item;
            }))
    
    4 条回复    2017-03-19 15:02:14 +08:00
    aussieweever
        1
    aussieweever  
       2017-03-19 09:13:30 +08:00 via Android
    没玩过,但 47 年前貌似是有些语言日期最小时间。另外难道不应该是直接从 datetimestamp 转成时间吗? month=day*30, year=day*365 都会造成偏差吧
    sensui7
        2
    sensui7  
    OP
       2017-03-19 11:53:16 +08:00
    @aussieweever 这个函数的原理是接受一个时间戳, 然后获得当前时间的时间戳, 他们的差除以毫秒数, 就是你说的 month=day*30, 这个只是计算月的毫秒数.

    这个函数我自己测试是没问题的, 但不知道为什么 V2EX 的帖子的时间戳穿进去都是这样.

    我的测试
    ```
    var oneMonthAgoTimestamp = new Date('2017/2/19').getTime()

    var oneMonthAgoTime = getDateDiff(oneMonthAgoTimestamp)

    var v2exTimestamp = 1489808486
    var v2exTime = getDateDiff(v2exTimestamp)

    console.log(oneMonthAgoTime) // 4 星期前
    console.log(v2exTime) // 47 年以前
    ```
    GordianZ
        3
    GordianZ  
    MOD
       2017-03-19 12:48:10 +08:00   ❤️ 1
    你打印一下 oneMonthAgoTimestamp 和 v2exTimestamp 就知道了。
    sensui7
        4
    sensui7  
    OP
       2017-03-19 15:02:14 +08:00
    @GordianZ 原来是精度的问题, 多谢, 多谢. XD
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1616 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 16:28 · PVG 00:28 · LAX 08:28 · JFK 11:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.