2017-12-14 17 views
3

私は自分のプロジェクトでPhonegapローカル通知を実装しようとしています。Phonegap:毎週日曜日にローカル通知が繰り返されますか?

私はこのプラグインを使用しています:

de.appplant.cordova.plugin.local-notification-custom 

私はプラグインをインストールし、それをテストし、それが正常に動作しています。

私はこのコードでそれをテストし、それが正常に動作します:

cordova.plugins.notification.local.schedule({ 
    id   : 1, 
    title  : 'I will bother you every minute', 
    text  : '.. until you cancel all notifications', 
    sound  : null, 
    every  : 'minute', 
    autoClear : false, 
    at   : new Date(new Date().getTime() + 10*1000) 
}); 

上記の通知が毎分と細かい作業を実行します。

ここでは、Sundayとすべてweekでのみ実行されるローカル通知を設定する必要があります。

私はこのような何かに出くわしたが、それをテストしたとき、それは何もしません:at: sunday_16_pmが正しいかどう

cordova.plugins.notification.local.schedule({ 
    id: 1, 
    title: "Test...", 
    text: "Test...", 
    sound: null, 
    every: 'week', 
    at: sunday_16_pm 
}); 

私も知りません!

誰かがこの問題についてアドバイスをお願いできますか?

ありがとうございます。

はEDIT:

https://github.com/katzer/cordova-plugin-local-notifications/wiki/04.-Scheduling

は、彼らが言うのサンプルコードがあります:

は時間を検索し、何も見つけなかったら、私はちょうどこのドキュメントに出くわした

スケジュール繰返し

cordova.plugins.notification.local.schedule({ 
    text: "Delayed Notification", 
    firstAt: monday, 
    every: "day", 
    icon: "file://img/logo.png" 
}, callback); 

しかし、mondayとは何ですか?それは変数ですか?もしそうなら、あなたはその変数をどうやって作りますか?

他の誰も読んで理解できないように書類を書いている理由はわかりません!

別の編集:

私は私がやろうとしているが、私は、イオン使用していないとしていたことがない、まさに説明している本を見つけました。だから私はそこに提供されているコードを理解していない!

https://www.joshmorony.com/getting-familiar-with-local-notifications-in-ionic-2/

答えて

2

私はどちらかこれらの変数sunday_16_pmまたはmondayについて知らないが、あなたはfirstAtを使用して独自の変数を使用することができます。

最初に、sunday_16_pmのタイムスタンプを見つけて、繰り返しが日曜日の午後に開始するようにこのプラグインに指示する必要があります。

このタイムスタンプ(これは動的に行う必要があると思います)を見つけるために、私は関数getDayMillDiffを書いて、現在と日曜日の時差を計算しました。その後、この差を使用して所望のsunday_16_pmを得る。

function getDayMillDiff(refday){ 
    var days = { 
     monday: 1, 
     tuesday: 2, 
     wednesday: 3, 
     thursday: 4, 
     friday: 5, 
     saturday: 6, 
     sunday: 0 
    }; 
    if(!days.hasOwnProperty(refday))throw new Error(refday+" is not listed in "+JSON.stringify(days)); 
    var curr = new Date(); 
    var triggerDay = days[refday]; 
    var dayMillDiff=0; 
    var dayInMill = 1000*60*60*24; 
    // add a day as long as refday(sunday for instance) is not reached 
    while(curr.getDay()!=triggerDay){ 
     dayMillDiff += dayInMill; 
     curr = new Date(curr.getTime()+dayInMill); 
    } 
    return dayMillDiff; 
} 

var today = new Date(); 

// how many days are between current day (thursday for instance) to sunday, add this difference to this sunday variable 
var sunday = today.getTime() + getDayMillDiff("sunday"); 

// convert timestamp to Date so that hours can be adjusted 
var sunday_16_pm = new Date(sunday); 
sunday_16_pm.setHours(16,0,0); 

// now we can use sunday_16_pm to schedule a notification showing at this date and every past week 
cordova.plugins.notification.local.schedule({ 
    id: 1, 
    title: "Test...", 
    text: "Test...", 
    every: 'week', 
    firstAt: sunday_16_pm 
}); 

もう一つの例:

日曜日以外の日のためのgetDayMillDiffをテストするには、単にその上に文字列"monday"を渡すことができます(常にgetDayMillDiffで変数days内にリスト名を使用してください) :

var today = new Date(); 
var monday = today.getTime() + getDayMillDiff("monday"); 

var monday_10_am = new Date(monday); 
monday_10_am.setHours(10,0,0); 

cordova.plugins.notification.local.schedule({ 
    id: 1, 
    title: "Test...", 
    text: "Test...", 
    every: 'week', 
    firstAt: monday_10_am 
}); 

希望します。

+0

これは素晴らしいです。しかし、質問のカップル。同じ日に1日追加するとどうなりますか?たとえば、日曜日に日曜日を追加するとどうなりますか?また、これは他の日にも使えますか?例:月曜日、金曜日、またはその他の曜日? – user2056633

+0

ありがとうございます。短い答え:はい、その日曜日または同じ日に0が追加されたとき、それは他の日にも動作します。楽しみを持ってください:) – Blauharley

+0

こんにちは、答えのおかげで。私はそれをテストし、ローカル通知を追加しました。以前のユーザーが尋ねたように、このコードで他の日を使用する方法を明確にしてください。私は、あなたがすでに曜日に数字を記載しているのを見ることができます。 var dayMillDiff = 0; 'をvar dayMillDiff = 1;やvar dayMillDiff = 2;などに変更するのと同じくらい簡単にできますか? –

関連する問題