回答
日期只是NSTimeIntervals周圍的包裝。他們沒有當地時間的概念,所以你不能直接從他們那裏獲得一天的價值。
你可以使用NSDateFormatter,像這樣:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd"];
NSString *today = [formatter stringFromDate:[NSDate date]];
NSString *dateToCompare = [formatter stringFromDate:someDate];
if ([dateToCompare isEqualToString:today])
{
...
}
日期格式化輸出使用本地時區,這樣可以保證這一天將是用戶正確的日期。
如果你真的想確保事件超過24小時的間隔(以防止作弊),它更容易,只是這樣做:
if ([date1 timeIntervalSinceDate:date2] > 3600*24)
{
...
}
UPDATE:由於abbood在評論中指出,創建NSDateFormatter對象可能很昂貴/很慢,因此如果它們將被重用,則應該掛在它們上面。
它不是將它們存儲在一個靜態變量或單身,因爲它們不是線程安全的一個好主意,但是你也可以,存儲在當前線程的threadDictionary這樣的:
//check for a cached formatter and recreate if needed
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
NSDateFormatter *formatter = threadDict[@"someUniqueKey"];
if (!formatter)
{
//create the formatter
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd"];
//cache the formatter
threadDict[@"someUniqueKey"] = formatter;
}
//use the formatter
...
您可以使用NSDateComponents的實例以及用戶的日曆查找週日並將其與上次更新進行比較。例如,
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
NSInteger weekday = [comps weekday];
或者,你可以使用的方法components:fromDate:toDate:options:
檢查的天數在時間間隔兩個日期之間,而不是當前日曆中的日期。如果您希望每24小時回答一次而不是一週的答案,這可能會更有用。
當然,如果這是一個在線遊戲(或類似的),你想驗證服務器以及客戶端的任何答案,用戶很容易將日期或時區更改爲「作弊」。
+1對於本地日期欺詐的警告:P – 2012-02-03 19:26:19
使用'NSWeekdayCalendarUnit',如果用戶試圖在一週後的同一天輸入值,則會阻止它們這樣做。我會用'(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit)'代替。 – yuji 2012-02-06 10:56:06
- 1. CPU的限制,每天一次
- 2. 每天限制競賽一次
- 3. iOS/Swift - 限制訪問視圖控制器到每天一次
- 4. 每天只有一次用戶限制表格提交
- 5. PHP MySQL考勤 - 如何限制時間(每天一次)
- 6. 表格設計 - 將輸入限制爲每月一次
- 7. 將CsvListReader限制爲一行
- 8. 運行任務週期性(每天一次/每週一次)
- 9. PHP每隔x天做一次動作
- 10. 每天自動刷新頁面一次
- 11. C#每30天運行一次代碼
- 12. 每天執行一次代碼
- 13. 將每次訪客用戶的操作限制爲一次(不登錄)
- 14. RoR 3將用戶限制爲每天2帖子
- 15. HealthKit requestAuthorizationToShareTypes每天一次?
- 16. c#限制每次迭代
- 17. 每天,每週,每月只顯示一次uialertview一次?
- 18. 每天運行一次VBA Excel宏一次
- 19. 使用webservice每天只動態執行一次方法
- 20. 如何在準確時間每天執行一次動作
- 21. 將循環限制爲每分鐘N次迭代
- 22. 將動態矩形限制爲一個
- 23. 在gridview的每一行顯示每一天的每一天
- 24. 限制按鈕點擊爲每5分鐘一次
- 25. Twitter流媒體API - 每天限制
- 26. 將mysql數據庫更改限制爲每小時不超過一次
- 27. .bashrc代碼在第一次登錄時每天執行1次
- 28. 自動 - 限制執行次數
- 29. 每次/每天隨機數
- 30. 移動平均PER TICKER爲每一天
prolly將是一個好主意,將格式化程序保存在一個singelton或什麼.. b/c如果你打算把上面的代碼放在一個類別或其他東西.. nsdateformatters臭名昭着的實例化時間 – abbood 2014-04-28 11:09:06
好點,我添加了一個關於這個的註釋。 – 2014-04-29 12:04:05