iOS 根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前

返回x分钟前/x小时前/昨天/x天前/x个月前/x年前

- (NSString *)timeInfo {
    return [NSDate timeInfoWithDate:self];
}

+ (NSString *)timeInfoWithDate:(NSDate *)date {
    return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]];
}

+ (NSString *)timeInfoWithDateString:(NSString *)dateString {
    NSDate *date = [self dateWithString:dateString format:[self ymdHmsFormat]];

    NSDate *curDate = [NSDate date];
    NSTimeInterval time = -[date timeIntervalSinceDate:curDate];

    int month = (int)([curDate month] - [date month]);
    int year = (int)([curDate year] - [date year]);
    int day = (int)([curDate day] - [date day]);

    NSTimeInterval retTime = 1.0;
    if (time < 3600) { // 小于一小时
        retTime = time / 60;
        retTime = retTime <= 0.0 ? 1.0 : retTime;
        return [NSString stringWithFormat:@"%.0f分钟前", retTime];
    } else if (time < 3600 * 24) { // 小于一天,也就是今天
        retTime = time / 3600;
        retTime = retTime <= 0.0 ? 1.0 : retTime;
        return [NSString stringWithFormat:@"%.0f小时前", retTime];
    } else if (time < 3600 * 24 * 2) {
        return @"昨天";
    }
    // 第一个条件是同年,且相隔时间在一个月内
    // 第二个条件是隔年,对于隔年,只能是去年12月与今年1月这种情况
    else if ((abs(year) == 0 && abs(month) <= 1)
             || (abs(year) == 1 && [curDate month] == 1 && [date month] == 12)) {
        int retDay = 0;
        if (year == 0) { // 同年
            if (month == 0) { // 同月
                retDay = day;
            }
        }

        if (retDay <= 0) {
            // 获取发布日期中,该月有多少天
            int totalDays = (int)[self daysInMonth:date month:[date month]];

            // 当前天数 + (发布日期月中的总天数-发布日期月中发布日,即等于距离今天的天数)
            retDay = (int)[curDate day] + (totalDays - (int)[date day]);
        }

        return [NSString stringWithFormat:@"%d天前", (abs)(retDay)];
    } else  {
        if (abs(year) <= 1) {
            if (year == 0) { // 同年
                return [NSString stringWithFormat:@"%d个月前", abs(month)];
            }

            // 隔年
            int month = (int)[curDate month];
            int preMonth = (int)[date month];
            if (month == 12 && preMonth == 12) {// 隔年,但同月,就作为满一年来计算
                return @"1年前";
            }
            return [NSString stringWithFormat:@"%d个月前", (abs)(12 - preMonth + month)];
        }

        return [NSString stringWithFormat:@"%d年前", abs(year)];
    }

    return @"1小时前";
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-19 23:51:05

iOS 根据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前的相关文章

iOS 依据Date获取x分钟前/x小时前/昨天/x天前/x个月前/x年前

返回x分钟前/x小时前/昨天/x天前/x个月前/x年前 - (NSString *)timeInfo { return [NSDate timeInfoWithDate:self]; } + (NSString *)timeInfoWithDate:(NSDate *)date { return [self timeInfoWithDateString:[self stringWithDate:date format:[self ymdHmsFormat]]]; } + (NSString *)

js获取n分钟(或n小时或n个月)后(或前)的时间(日期)

标题有点绕,其实意思就是根据系统当前时间,获取n分钟或n小时或n个月后的时间. 例如:当前时间下,获取10分钟后的时间. var date=new Date(); //1. js获取当前时间 var min=date.getMinutes(); //2. 获取当前分钟 date.setMinutes(min+10); //3. 设置当前时间+10分钟:把当前分钟数+10后的值重新设置为date对象的分钟数 var y = date.getFullYear(); var m = (date.get

ios new Date(&#39;yyyy-MM-dd HH-mm-ss&#39;).getTime() 方法获取不到时间戳

ios兼容性问题  不支持 ‘-’ 连接日期 解决方法 new Date("yyyy-MM-dd HH-mm-ss".replace(/-/g, "/")) ios new Date('yyyy-MM-dd HH-mm-ss').getTime() 方法获取不到时间戳 原文地址:https://www.cnblogs.com/baobao0205/p/12217428.html

iOS 刚刚,几分钟前,几小时前,几天前,几月前,几年前

- (NSString *)compareCurrentTime:(NSDate*) compareDate { NSTimeInterval timeInterval = [compareDate timeIntervalSinceNow]; timeInterval = -timeInterval; int temp = 0; NSString *result; if (timeInterval < 60) { result = @"刚刚"; } else if((temp

iOS常用于显示几小时前/几天前/几月前/几年前的代码片段

iOS常用于显示几小时前/几天前/几月前/几年前的代码片段 2015-03-13 10:09 版权声明:请关注个人博客:http://www.henishuo.com/ print? /** * Retain a formated string with a real date string * * @param dateString a real date string, which can be converted to a NSDate object * * @return a strin

long类型的时间转为n秒前n分钟前n小时前或者日期

1 package com.tai.use; 2 3 import java.text.DateFormat; 4 import java.text.SimpleDateFormat; 5 import java.util.Calendar; 6 import java.util.Date; 7 8 public class GuiYI 9 { 10 /** 11 * GuiYI 诡异的需求 12 * 转为 n秒前 n分钟前 n小时前 日期 13 * @param time 14 * @para

linux在shell date获取时间的相关操作

获得当天的日期 date +%Y-%m-%d 输出: 2011-07-28 将当前日期赋值给DATE变量DATE=$(date +%Y%m%d) 有时候我们需要使用今天之前或者往后的日期,这时可以使用date的 -d参数 获取明天的日期 date -d next-day +%Y%m%d 获取昨天的日期 date -d last-day +%Y%m%d 获取上个月的年和月 date -d last-month +%Y%m 获取下个月的年和月date -d next-month +%Y%m 获取明年

PHP date(&quot;Y-m-d H:i:s&quot;);获取当前时间 差8小时解决办法

从php5.1.0开始,php.ini里加了date.timezone这个选项,并且默认情况下是关闭的也就是显示的时间(无论用什么php命令)都是格林威治标准时间和我们的时间(北京时间)差了正好8个小时. 关于timezone 大陆内地可用的值是:Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi ,PRC(依次为重庆,上海,乌鲁木齐,中华人民共和国)港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港

js new Date() 获取时间

js new Date() 获取时间 Date 对象用于处理日期和时间.创建 Date 对象的语法:var myDate=new Date()Date 对象会自动把当前日期和时间保存为其初始值.参数形式有以下5种: new Date("month dd,yyyy hh:mm:ss");new Date("month dd,yyyy");new Date(yyyy,mth,dd,hh,mm,ss);new Date(yyyy,mth,dd);new Date(ms);