NSDATE لليوم الأول من الشهر
-
03-10-2019 - |
سؤال
هذا مفهوم بسيط ، لكن حتى الآن لم أتمكن من العثور على حل أنيق (ومستقل تقويمي). أحتاج إلى العثور على اليوم الأول من الشهر ل NSDate
. على سبيل المثال ، بالنظر إلى تعسفي NSDate
(arbitraryDate
) سيتم إرجاع كائن nsdate آخر (دعنا نسمي هذا firstDayOfMonthDate
) الذي يمثل اليوم الأول من الشهر في arbitraryDate
. لا يهم مكون الوقت ، حيث أحتاج فقط إلى كائن NSDATE لليوم الأول من الشهر (على الرغم من أنه سيكون مفيدًا إذا تم الخروج من الوقت).
شكرا مقدما لأي مساعدة.
المحلول
حل ممكن:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *arbitraryDate = [NSDate date];
NSDateComponents *comp = [gregorian components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:arbitraryDate];
[comp setDay:1];
NSDate *firstDayOfMonthDate = [gregorian dateFromComponents:comp];
نصائح أخرى
NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
fromDate:[NSDate date]];
components.day = 1;
NSDate *firstDayOfMonthDate = [[NSCalendar currentCalendar] dateFromComponents: components];
NSLog(@"First day of month: %@", [firstDayOfMonthDate descriptionWithLocale:[NSLocale currentLocale]]);
سريع 3
لقد أدرجت الحصول على آخر يوم من الشهر في حال كان أي شخص مفيدًا لأي شخص.
extension Date {
func lastDayOfMonth() -> Date {
let calendar = Calendar.current
let dayRange = calendar.range(of: .day, in: .month, for: self)
let dayCount = dayRange!.count
var comp = calendar.dateComponents([.year, .month, .day], from: self)
comp.day = dayCount
return calendar.date(from: comp)!
}
func firstDayOfMonth() -> Date {
let calendar: Calendar = Calendar.current
var components: DateComponents = calendar.dateComponents([.year, .month, .day], from: self)
components.setValue(1, for: .day)
return calendar.date(from: components)!
}
}
نسخة سريعة
let arbitraryDate:NSDate = NSDate()
let calendar:NSCalendar = NSCalendar.currentCalendar()
let components:NSDateComponents = calendar.components([.Year, .Month, .Day], fromDate: arbitraryDate)
components.setValue(1, forComponent: .Day)
let firstDayOfMonthDate = calendar.dateFromComponents(components)
سريع 3:
let calendar = Calendar.current
var comps = calendar.dateComponents([.year, .month], from: date)
comps.setValue(1, for: .day)
let firstDayOfMonth = calendar.date(from: comps)!
// I tried this, but it doesn't work, why?
// let firstDayOfMonth = calendar.date(bySetting: .day, value: 1, of: date)!
لا تنتمي إلى StackOverflow