Замена объекта даты на строки "сегодня" и "вчера" в iphone
Я хочу вернуть свои объекты даты со строкой "сегодня" и "вчера" и даты в Objective C. Пожалуйста, все комментарии приветствуются:
У меня есть даты с форматом @ "yyyy-MM-dd HH: mm: ss" ], а затем выясняется, установлена ли дата сегодня или вчера, и, если это так, она возвращает "(вчера, сегодня | дата)" сформированная строка.
Ответы
Ответ 1
NSDateFormatter может это сделать. Однако это не работает с пользовательскими форматами дат, но в большинстве случаев, когда вам нужны относительные даты, которые вы представляете их пользователю, и вы не должны использовать жестко кодированные форматы дат в первое место.
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.timeStyle = NSDateFormatterMediumStyle;
df.dateStyle = NSDateFormatterShortStyle;
df.doesRelativeDateFormatting = YES; // this enables relative dates like yesterday, today, tomorrow...
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-48*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-24*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate date]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:24*60*60]]);
NSLog(@"%@", [df stringFromDate:[NSDate dateWithTimeIntervalSinceNow:48*60*60]]);
это напечатает:
2013-06-06 09:13:22.844 x 2[11732:c07] 6/4/13, 9:13:22 AM
2013-06-06 09:13:22.845 x 2[11732:c07] Yesterday, 9:13:22 AM
2013-06-06 09:13:22.845 x 2[11732:c07] Today, 9:13:22 AM
2013-06-06 09:13:22.846 x 2[11732:c07] Tomorrow, 9:13:22 AM
2013-06-06 09:13:22.846 x 2[11732:c07] 6/8/13, 9:13:22 AM
На устройстве с немецким языком это будет печатать "Vorgestern" (позавчера) и "Übermorgen" (послезавтра) на первую и последнюю дату.
Ответ 2
Как насчет NSDateFormatter
setDoesRelativeDateFormatting
?
Указывает, использует ли приемник фразы, такие как "сегодня" и "завтра" для компонента даты.
- (void)setDoesRelativeDateFormatting:(BOOL)b
Задайте параметры b = YES, чтобы указать, что приемник должен использовать относительное форматирование даты, иначе NO.
Посмотрите: ссылка класса NSDateFormatter
Ответ 3
Я надеюсь, что это тоже будет полезно для вас:
NSDate *date = somedate;
NSInteger dayDiff = (int)[date timeIntervalSinceNow] / (60*60*24);
NSDateComponents *componentsToday = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];
NSDateComponents *componentsDate = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:somedate];
NSInteger day = [componentsToday day] - [componentsDate day];
if (dayDiff == 0) {
NSLog(@"Today");
} else if (dayDiff == -1) {
NSLog(@"Yesterday");
} else if(dayDiff > -7 && dayDiff < -1) {
NSLog(@"This week");
} else if(dayDiff > -14 && dayDiff <= -7) {
NSLog(@"Last week");
} else if(dayDiff >= -60 && dayDiff <= -30) {
NSLog(@"Last month");
} else {
NSLog(@"A long time ago");
}
Ответ 4
Замена объекта даты на строки "сегодня" и "вчера" в Swift.
Если вы хотите отобразить дату с другим форматом, измените timeStyle
и dateStyle
, как вам нужно.
var df = DateFormatter()
df.timeStyle = .medium
df.dateStyle = .short
df.doesRelativeDateFormatting = true
// this enables relative dates like yesterday, today, tomorrow...
print("\(df.string(from: Date(timeIntervalSinceNow: -48 * 60 * 60)))")
print("\(df.string(from: Date(timeIntervalSinceNow: -24 * 60 * 60)))")
print("\(df.string(from: Date()))")
print("\(df.string(from: Date(timeIntervalSinceNow: 24 * 60 * 60)))")
print("\(df.string(from: Date(timeIntervalSinceNow: 48 * 60 * 60)))")
Результат:
6/4/13, 9:13:22 AM
Yesterday, 9:13:22 AM
Today, 9:13:22 AM
Tomorrow, 9:13:22 AM
6/8/13, 9:13:22 AM
Ответ 5
NSDate *todayDate = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *today = [dateFormat stringFromDate:todayDate];
NSLog(@"today is %@",today);
NSDate *yesterdayDate = [todayDate dateByAddingTimeInterval: -86400.0];
NSString *yesterday = [dateFormat stringFromDate:yesterdayDate];
NSLog(@"yesterday was %@",yesterday);
NSString *yourDate = [NSString stringWithFormat:@"2013-06-08 12:33:28"];
if ([yourDate isEqualToString:yesterday]) {
NSLog(@"yesterday");
}
else if ([yourDate isEqualToString:today])
{
NSLog(@"today");
}
else
{
NSLog(@"the date is %@",yourDate);
}
1) выведите сегодня и вчера дату, затем сравните дату, которую вы вводите, и напечатайте соответственно
Ответ 6
NSTimeInterval interval = [dict[@"deviceTimeStamp"]doubleValue]; // set your intervals
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval]; // set your past date or create it using dateWithIntervalSince1970 method
[formatter setDateFormat:@"hh:mm a"];
NSTimeZone *tz = [NSTimeZone defaultTimeZone];
NSInteger seconds = [tz secondsFromGMTForDate: date];
NSDate *dateee = [NSDate dateWithTimeInterval: seconds sinceDate: date];
NSDateComponents *components = [[NSCalendar currentCalendar] components:units fromDate:dateee toDate:[NSDate date] options:0];
if (components.day > 0)
{
if (components.day > 1){
[formatter setDateFormat:@"MMM dd"];
NSString *dateString = [formatter stringFromDate:date];
NSlog(@"%@",dateString);
}
else{
NSlog(@"Yesterday");
}
}
else{
NSlog(@"Today");
}