用于打开具有特定日期的本机日历的URL方案

时间:2013-12-19 14:18:41

标签: objective-c cocoa-touch calendar icalendar

我找到了从我的应用程序打开日历的示例代码,但我无法在特定日期打开。

NSString* launchUrl = @"calshow://";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];

有没有办法在“lunchUrl”字符串的末尾添加特定日期,因此当用户打开日历时,它会显示给定日期。

我已经尝试过以下格式:@“calshow://?= 2013 12 19”,@“calshow://?= 2013-12-19”,@“calshow://?= 2013 + 12 +19" 。这些似乎都不适合我...任何想法我在做错什么?

4 个答案:

答案 0 :(得分:26)

我玩了这个url方案,并找到了做到这一点的方法。主要的两点是:

  1. 请勿在{{1​​}}
  2. 之后使用“//”
  3. 自参考日期(2001年1月1日)起通过时间戳
  4. 以下是代码:

    calshow:

    这就是我所说的:

    - (void)showCalendarOnDate:(NSDate *)date
    {
        // calc time interval since 1 January 2001, GMT
        NSInteger interval = [date timeIntervalSinceReferenceDate]; 
        NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"calshow:%ld", interval]];
        [[UIApplication sharedApplication] openURL:url];
    }
    

    也许您应该考虑到// create some date and show the calendar with it - (IBAction)showCalendar:(id)sender { NSDateComponents *comps = [[NSDateComponents alloc] init]; [comps setDay:4]; [comps setMonth:7]; [comps setYear:2010]; NSCalendar *cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [self showCalendarOnDate:[cal dateFromComponents:comps]]; } 不是公共网址方案,所以也许Apple会以这种方式使用它。或者也许他们不会(我没有研究过)。

答案 1 :(得分:1)

这适用于ios 8 - 只需添加自2001年1月1日00:00起的秒数,所以要在2001年1月2日开放cal

NSString* launchUrl = @"calshow:86400";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: launchUrl]];

我使用RubyMotion,所以我的代码看起来像这样:

url = NSURL.URLWithString("calshow:#{my_date - Time.new(2001,1,1)}")
UIApplication.sharedApplication.openURL(url)

答案 2 :(得分:1)

Swift 3

UIApplication.shared.openURL(URL(string: "calshow:\(date.timeIntervalSinceReferenceDate)")!)

关于Apple是否允许使用此功能的评论将不胜感激!

答案 3 :(得分:1)

与momentjs做出反应:

const testDate = moment('2020–04–01'),      // date is local time
  referenceDate = moment.utc('2001–01-01'), // reference date is utc
  seconds = testDate.unix() — referenceDate.unix();
Linking.openURL('calshow:' + seconds); //opens cal to April 1 2020

https://medium.com/@duhseekoh/need-to-open-the-os-calendar-at-a-specific-date-in-react-native-55f3a085cf8e