获取指定时间到现在的时间差,刚刚、一分钟前

本文介绍了一个名为friendly.js的VUX过滤器方法,用于计算指定日期与当前日期之间的时间差,并提供了一种友好的时间表达方式。该方法可以判断输入是否为有效日期,并根据不同时间段返回诸如“刚刚”、“1分钟前”等人性化描述。

friendly.js 计算指定时间到当前时间的时间差
该方法是vux的 filter中的一个

export default function (time) {
  let date = (typeof time === 'number') ? new Date(time) : new Date((time || '').replace(/-/g, '/'))
  let diff = (((new Date()).getTime() - date.getTime()) / 1000)
  let dayDiff = Math.floor(diff / 86400)

  let isValidDate = Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime())

  if (!isValidDate) {
    console.error('not a valid date')
  }
  const formatDate = function (date) {
    let today = new Date(date)
    let year = today.getFullYear()
    let month = ('0' + (today.getMonth() + 1)).slice(-2)
    let day = ('0' + today.getDate()).slice(-2)
    let hour = today.getHours()
    let minute = today.getMinutes()
    let second = today.getSeconds()
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`
  }

  if (isNaN(dayDiff) || dayDiff < 0 || dayDiff >= 31) {
    return formatDate(date)
  }

  return dayDiff === 0 && (
      diff < 60 && '刚刚' ||
      diff < 120 && '1分钟前' ||
      diff < 3600 && Math.floor(diff / 60) + '分钟前' ||
      diff < 7200 && '1小时前' ||
      diff < 86400 && Math.floor(diff / 3600) + '小时前') ||
    dayDiff === 1 && '昨天' ||
    dayDiff < 7 && dayDiff + '天前' ||
    dayDiff < 31 && Math.ceil(dayDiff / 7) + '周前'
}
<think>好的,用户问的是如何获取两个时间时间差,以分钟为单位。我需要先理解用户的需求。他们可能是在编程中需要计算两个时间点之间的分钟数差异,比如在开发应用程序时处理时间相关的功能,或者数据分析中计算时间间隔。 首先,我应该考虑不同的场景和编程语言,但用户没有指定具体语言,所以需要给出通用的方法步骤,或者以常见语言为例。比如,Python、JavaScript、Java等都是常用的,可能举其中一两个例子。 然后,要明确计算时间差的基本步骤:获取两个时间点,转换为合适的时间结构(比如时间戳或日期对象),计算差值,再将差值转换为分钟。这里的关键点是如何处理不同时间单位的转换,比如毫秒、秒到分钟。 需要注意的问题包括时区处理,如果两个时间不在同一时区,是否需要调整?另外,是否要考虑夏令时等变化?不过通常在没有特别说明的情况下,可能假设时间是在同一时区下的。 另外,用户可能遇到的常见问题,比如时间格式的解析,如果时间是以字符串形式给出,如何正确解析为日期对象。例如,在Python中使用strptime,JavaScript中使用Date.parse等。 还需要考虑时间差的绝对值,无论先后顺序,可能需要取绝对值,或者根据需求决定是否保留符号。例如,用户可能只关心间隔多少分钟,而不在乎哪个时间。 接下来,可能需要给出具体代码示例。比如Python中使用datetime模块: 时间1 = datetime.datetime(2023, 10, 1, 12, 30) 时间2 = datetime.datetime(2023, 10, 1, 13, 15) 差值 = 时间2 - 时间1 分钟差 = 差值.total_seconds() // 60 或者JavaScript: let time1 = new Date('2023-10-01T12:30'); let time2 = new Date('2023-10-01T13:15'); let 差值毫秒 = time2 - time1; let 分钟差 = Math.floor(差值毫秒 / 1000 / 60); 同时,要提醒用户注意时间字符串的格式是否正确,以及跨日期的情况是否会影响结果,比如隔天的时间差计算是否依然准确。 另外,可能需要提到处理不同时间格式的情况,比如用户提供的是带有日期的时间还是只有时分部分,是否需要先提取时间部分再进行计算。 最后,总结关键步骤:获取时间对象、计算差值、转换单位,并注意时区和格式问题。确保用户能够根据这些步骤在不同语言中实现功能。</think>获取两个时间时间差(以分钟为单位)的通用步骤如下: ### 核心步骤 1. **时间标准化** - 将两个时间统一转换为时间戳(毫秒/秒数)或编程语言支持的日期对象 $$ \text{时间戳} = \text{基准时间} + \text{累计时间量} $$ 2. **计算差值** - 时间差 = 较晚时间 - 较早时间 $$ \Delta t = t_2 - t_1 $$ 3. **单位转换** - 秒 → 分钟:除以 60 - 毫秒 → 分钟:除以 (1000×60) $$ \text{分钟差} = \frac{\Delta t}{60} \quad \text{或} \quad \frac{\Delta t}{60,000} $$ ### 代码示例(Python) ```python from datetime import datetime # 定义两个时间(带时区需统一) time1 = datetime(2023, 10, 1, 12, 30) # 2023-10-01 12:30 time2 = datetime(2023, 10, 1, 13, 15) # 2023-10-01 13:15 # 计算时间差 delta = time2 - time1 minutes = delta.total_seconds() // 60 # 精确到整数分钟 # 输出:45 ``` ### 关键注意 1. **时区统一**:若时间包含时区信息,需先转换为同一时区 2. **夏令时**:涉及夏令时变更时段时,部分语言的时间计算可能自动处理 3. **格式解析**:若输入为字符串,需正确解析格式: ```python # 解析字符串时间 time_str = "2023-10-01 12:30" time_obj = datetime.strptime(time_str, "%Y-%m-%d %H:%M") ``` ### 扩展场景 - **跨午夜计算**:算法自动处理日期变更 - **负数处理**:若 $t_2 < t_1$,结果会为负数,可用绝对值函数处理: $$ |\Delta t| $$ 不同语言实现原理相同,主要差异在于日期对象的操作方式。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值