转换然后比较NSDates


Converting and then Comparing NSDates

。。。研究了几个小时,结果越来越困惑!

我在美国东海岸。
我的数据库由一个似乎位于西海岸的服务器托管
我之所以能说出这一点,是因为当我在我的时间上午9:45(同样是东海岸时间)将新数据插入数据库时,当我直接查看服务器上的MySQL表时,它显示数据已在上午6:45插入

问题是,当我的应用程序从服务器读取该日期并将其与自己的上次保存时间进行比较时,上次保存的时间总是比来自服务器的上次更新时间晚
因此,我插入服务器的任何新数据都会被自动忽略,因为它注册为旧数据(确切地说是3小时旧数据)

我已经尝试过使用NSDateFormatterNSTimeZoneNSLocale以及所有这些的各种组合进行各种转换,但我得到的意大利面杂烩汤根本不起作用

以下是我的一些代码:

PHP代码-将新数据插入MySQL数据库时使用:

// Declare a var for the date of insertion into the Database:
$storeItemDateAdded = date('Y-m-d H:i:s');
...
// Insert the new data into the database:
$stmt = $mysqli->prepare("INSERT INTO StoreTable (Name, Price, DateAdded)
VALUES ('". $newStoreItemName ."', '". $newStoreItemPrice ."', '".$storeItemDateAdded."');");


Objective-C代码

(注意:
-进入应用程序的JSON对象(NSDictionary)以以下格式显示日期:2015-03-29 06:45:30
-因此,我将JSON的这一特定部分存储在名为remoteDBStoreLastUpdateDateNSString var中

// Convert this String to an actual NSDate Object:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *liveStoreActualUpdateNSDate = [dateFormat dateFromString:remoteDBStoreLastUpdateDate];
// Now compare the Saved date and this new Remote date:
if ([storeSavedLastUpdateNSDate compare:liveStoreActualUpdateNSDate] == NSOrderedAscending) {
   NSLog(@"Need to get FRESH STORE DATA!");
   [self getNewData];
}
else {
   NSLog(@"STORE is up to date!");
   [self useSavedData];
}

正如我所说,这个测试产生了错误的结果,但不是因为代码/逻辑错误,而是因为我正在比较的NSDate对象来自不同的时区
那么,我如何让它们处于同一时区,并进行真实有效的比较呢?

PHP语句
$storeItemDateAdded = date('Y-m-d H:i:s');
正在使用服务器时间。date()函数格式化本地日期和时间,并返回格式化后的日期字符串。

然后

$stmt = $mysqli->prepare("INSERT INTO StoreTable (Name, Price, DateAdded) VALUES ('". $newStoreItemName ."', '". $newStoreItemPrice ."', '".$storeItemDateAdded."');");

在数据库中插入服务器的本地日期/时间,而不是发送到服务器的日期/时间。

将日期/时间发送到服务器,不要依赖服务器的本地时间。或者在所有系统上使用UTC时间,这是默认的NSDate内部存储。或者将时区偏移量添加到时间字符串表示中。

将时间发送到服务器意味着在iOS设备上获取时间,正确格式化并将其与发送的数据一起发送到服务器。然后在服务器上使用从应用程序接收的时间作为MySQL语句中的时间。