1

私はあなたがこれで私を助けることができることを願っています:

お店が実際に開いているかどうかを表示するアプリを書いています。このために、私は毎日と各営業時間に対して異なる変数/ NSDate-オブジェクト(以前に行ったdateformatterの設定)のように宣言しました:

    NSDate *mondayMorningOpening = [dateFormatter dateFromString:@"08:00"];
    NSDate *montagMorningClosing = [dateFormatter dateFromString:@"12:30"];
    NSDate *mondayNoonOpening = [dateFormatter dateFromString:@"15:00"];
    NSDate *montagNoonClosing = [dateFormatter dateFromString:@"21:30"];

また、実際の時刻にNSDateを設定しました。

    NSString *tempDate1 = [dateFormatter stringFromDate:date];
    NSDate *actualTime = [dateFormatter dateFromString:tempDate1];

ここで、実際の時間が店舗の営業時間の時間範囲の前か後かを計算したいと思います。私はこれをしました:

    if ([actualTime earlierDate: mondayMorningClosing && [aktuelleZeit laterDate: mondayMorningOpening])
        {
         NSLog (@"The shop is open!");
        }
    else if ([actualTime earlierDate: mondayNoonClosing]&& [actualTime laterDate: mondayNoonOpening])
        {
         NSLog (@"The shop is open!");
        }
    else
        {
         NSLog (@"The shop is closed!");
        }

でも、いつでも「お店は開いてる!」と表示されます。

たぶんあなたは私がオープニングステータスを正しく表示できるようにするために何をすべきかについての考えを持っています...

4

3 に答える 3

1

2つの日付がある場合は、次のように2つの日付NSDateの間にあるかどうかを判断できます。

- (BOOL)isDate:(NSDate *)date betweenFirstDate:(NSDate *)firstDate andSecondDate:(NSDate *)secondDate
{
    BOOL isEqualToFirstOrSecond = [date compare:firstDate] == NSOrderedSame || [date compare:secondDate] == NSOrderedSame;
    BOOL isBetweenFirstAndSecond = [date compare:firstDate] == NSOrderedDescending && [date compare:secondDate] == NSOrderedAscending;

    return isEqualToFirstOrSecond || isBetweenFirstAndSecond;
}
于 2012-11-05T21:27:13.523 に答える
1

EarlyDateとlaterDateの意味を誤解しました。メソッドは「isEarlierDate」と「isLaterDate」ではなく、BOOLを返しません。これらのメソッドは、2つの日付の早い方(または遅い方)のNSDateオブジェクトを返します。 nilオブジェクトなので、常にtrueと評価されます。

時間間隔をとって2つの日付を比較します。

if ([actualTime timeIntervalSinceDate: mondayMorningClosing]<0 && [aktuelleZeit timeIntervalSinceDate: mondayMorningOpening]>0)
{
    NSLog (@"The shop is open!");
}
于 2012-11-05T21:10:48.883 に答える
1

2つの日付を比較できますが、その結果、NSDateが作成されます。

if ([date1 compare:date2] == NSOrderedDescending) {
    NSLog(@"date1 is later than date2");        

} else if ([date1 compare:date2] == NSOrderedAscending) {
    NSLog(@"date1 is earlier than date2");
}
于 2012-11-05T21:16:28.627 に答える