用于打开具有特定日期的本地日历的 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 方案的主要内容,如果未能解决你的问题,请参考以下文章