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

Posted

技术标签:

【中文标题】用于打开具有特定日期的本地日历的 URL 方案【英文标题】:URL scheme for opening native calendar with specific date 【发布时间】:2013-12-19 14:18:40 【问题描述】:

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

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

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

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

【问题讨论】:

【参考方案1】:

我对这个 url 方案进行了一些尝试,并找到了实现它的方法。主要有两点:

    不要在calshow: 之后使用“//” 自参考日期(2001 年 1 月 1 日)起传递时间戳

代码如下:

- (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]];

也许您应该考虑到calshow: 不是公共 url 方案,因此 Apple 可能会不赞成以这种方式使用它。或者也许他们不会(我没有研究过)。

【讨论】:

嗨 Andris,我已经使用了上面的代码,它在过去的日期中完美运行。如果我给出未来日期,它会回到当前日期。能否请您给一些关于开放未来日期的建议。 这可以从上面的默认日历中获取日期吗?【参考方案2】:

对于使用 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

【讨论】:

【参考方案3】:

这适用于 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)

【讨论】:

【参考方案4】:

斯威夫特 3

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

如果 Apple 是否允许使用此功能,我们将不胜感激!

【讨论】:

以上是关于用于打开具有特定日期的本地日历的 URL 方案的主要内容,如果未能解决你的问题,请参考以下文章

将日期保存到本地存储

具有可选日期范围的日历[关闭]

日期范围选择器 - 日历标题本地化格式

苹果手机URL是啥

Obj-C - 在特定时间触发本地通知?

jquery打开日历到特定月份