PhoneGap iOS LocalNotifications夏令时

时间:2013-04-08 14:14:34

标签: ios objective-c cordova phonegap-plugins uilocalnotification

我正在使用(臭名昭着的)Drew Dahlman's Phonegap Local Notifications in iOS似乎可以工作。

我从未写过一行 objective-c 并且不愿意(这可能就是我现在遇到麻烦的原因!)但是我认为这个插件工作不正常而且会喜欢尽可能修复它。

当我在今天13:00设置通知时,它会正确触发。但是,当夏令时发生时,通知会在晚上14点开始发射。

这是因为时区没有被考虑在内吗?德鲁提到时区设置为+0000不是问题,但这是错误的信息吗?我应该更新插件来处理时区和夏令时吗?或者在我自己的代码中处理夏令时,只需在DST处于活动状态时将日期设置为-1小时?

我认为我必须更新 LocalNotification.m 中的第二行,但正如我所说,我不确定要将其更新为什么。

UILocalNotification *notif = [[UILocalNotification alloc] init];
notif.timeZone = [NSTimeZone defaultTimeZone];

2 个答案:

答案 0 :(得分:1)

啊,设置通知时似乎有点奇怪的问题。

示例1: 当我做这样的事情时,duedate的值是2013-04-08T21:30

var d = new Date(duedate).getTime();
d = new Date(d);

plugins.localNotification.add({
date: d,
...

通知记录为设置为21:30,如下所示:

Notification Set: 2013-04-08 21:30:00 +0000

示例2:如果我像这样设置duedate :(现在时间是21:30)

var d = new Date().getTime();

通知记录为设置为20:30,如下所示:

Notification Set: 2013-04-08 20:30:00 +0000

然而在第二个示例中,由于节省了一天的费用,通知会在21:30触发。

解决方案(各种各样)

我将不得不在现在和我希望触发通知之间添加或减去时间差异,而不是专门设置日期。

答案 1 :(得分:0)

这很有趣。我在创建插件时遇到的最重要的事情之一就是JS和OBJ-C解释时间的奇怪方式。根据文档,您可以使用systemTimeZone,但这又是由插件所依赖的系统设置的。这是用户设置和手机正在使用的时间。

即使认为它默认为+ 000GMT,它仍然在系统时间内考虑到这一点,并对+0500进行调整或者你所在的区域。

UILocalNotification not using the correct timezone

NSTimeZone: what is the difference between localTimeZone and systemTimeZone?

两者都处理这个问题 - 默认情况下插件使用的是系统时间。