# 誕生日メールの一斉送信

**URL:** <https://community.cybozu.dev/t/topic/870>\
**Category:** kintone 開発相談\
**Created:** [2017 年 8 月 23 日午前 8:42 UTC](https://community.cybozu.dev/t/topic/870 "2017-08-23T08:42:21Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Legacy\_Account1863](https://avatars.discourse-cdn.com/v4/letter/l/dbc845/32.png) [@Legacy\_Account1863](https://community.cybozu.dev/u/Legacy_Account1863)\
**Post date:** [2017 年 8 月 23 日午前 8:42 UTC](https://community.cybozu.dev/t/topic/870/1 "2017-08-23T08:42:21Z")

</div>

お世話になっております。

顧客情報に「誕生日」の項目を設けております。

毎年、当日にお祝いメールをメールワイズを使って自動送信するか、

送信対象者を毎日抽出するアプリを作りたいと思っております。

方法やサンプルなどをご教示いただけませんでしょうか。

&nbsp;

よろしくお願いいたします。

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1821](https://avatars.discourse-cdn.com/v4/letter/l/d07c76/32.png) [@Legacy\_Account1821](https://community.cybozu.dev/u/Legacy_Account1821)\
**Post date:** [2017 年 8 月 25 日午前 6:53 UTC](https://community.cybozu.dev/t/topic/870/2 "2017-08-25T06:53:38Z")

</div>

なかのさん、こんにちは

誕生日の項目は、日付フィールドですかね？

送信対象者を抽出するためには、誕生日の月日（MM/DD）で絞り込んで抽出する必要があると考えて、  
どうやって日付フィールドから月日（MMDD）を作り出すか、という方法を考えてみました。

&nbsp;

#### １．標準機能でなんとかする

- 文字列（１行）フィールドを設置し、自動計算でMMDDを取得するよう設定する。  
自動計算の設定： DATE\_FORMAT(誕生日, “MMdd”, “Asia/Tokyo”)  
（誕生日の入った日付フィールドのフィールドコード：誕生日）
- 一覧の絞り込みで、上で設定したフィールド＝当日のMMDD で絞り込む。  
ここは手動で設定する必要がありますが。

サンプル：

※この方法を試していて、気付きましたが、自動計算で日付フォーマット関数を扱うことができるのは、  
1970年1月1日以降の日付のみ、となっています。（[ヘルプ参照](https://help.cybozu.com/ja/k/user/date_format.html)）

それ以前の誕生日の場合は、計算結果がエラーになります（#VALUE!）。

ムリヤリなんとかしようと、自動計算の中で日付の加算（何年分か加算してからMMDD取得）にトライしてみましたが、  
加算できるのは、秒単位（１年：60\*60\*24\*365 等）になるので、長期間の加算では、うるう年の誤差が起こってしまいました。

1970年より前の誕生日の人がいる場合は、NGですね。。。

&nbsp;

#### ２．JavaScriptカスタマイズ

仕方がないので、JavaScriptでちょっとだけカスタマイズして対応してみました。

- MMDDを入れるフィールド（文字列1行）を用意（フィールドコード：誕生日\_月日）
- 上のフィールドに誕生日から月日を設定するJavaScriptカスタマイズを設定
- 送信対象者の抽出は、標準機能の一覧を使って手動で絞り込み（誕生日\_月日＝1108 等）

※日付の計算にはMoment.jsを使うと楽にできるので、以下を参考にMoments.jsのライブラリーを設定しました。

[https://developer.cybozu.io/hc/ja/articles/204982474-Moment-js-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6-%E6%97%A5%E6%99%82%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B](https://community.cybozu.dev/hc/ja/articles/204982474-Moment-js-%E3%82%92%E5%88%A9%E7%94%A8%E3%81%97%E3%81%A6-%E6%97%A5%E6%99%82%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%81%AE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%82%92%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA%E3%81%99%E3%82%8B)

&nbsp;

```
(function() {
"use strict";

// レコードを保存するときに、誕生日フィールドからMMDDを抽出し、誕生日_月日フィールドに設定する
kintone.events.on(["app.record.edit.submit","app.record.create.submit"], function(event) {
var record = event.record;
var date = record['誕生日']['value'];
record['誕生日_月日']['value'] = moment(date).format('MMDD');
return event;
});

// 編集画面を開いた時に、月日フィールドを編集不可にする
kintone.events.on(["app.record.create.show","app.record.edit.show"], function(event) {
var record = event.record;
record['誕生日_月日']['disabled'] = true;
return event;
});

})();

```

&nbsp;

これで無事に老若男女問わず、誕生日の月日を取り出すことができました。

同様に、月（MM)フィールドを作っておけば、今月誕生日の人リストを作ることもできますね！

ご参考になりましたでしょうか？ 他にいいやり方を思いついた人はぜひ共有ください！

---

<div class="post-metadata">

**Author:** ![Legacy\_Account1863](https://avatars.discourse-cdn.com/v4/letter/l/dbc845/32.png) [@Legacy\_Account1863](https://community.cybozu.dev/u/Legacy_Account1863)\
**Post date:** [2017 年 8 月 28 日午前 2:29 UTC](https://community.cybozu.dev/t/topic/870/3 "2017-08-28T02:29:41Z")

</div>

Shotaro Matsudaさん

ご丁寧にご教示くださり、誠にありがとうございます！

&nbsp;

該当する月日のデータ抽出ができました。

本当にありがとうございます。

&nbsp;

なおここから更に、

・「今日」に該当する人を毎日自動抽出して表示するアプリを設ける

・上記の件数を「通知」か「お知らせ」に表示する

ようなことは実装は不可能でしょうか？

&nbsp;

度々申し訳ございません。

もしお分かりであれば方法などご教示いただければ幸いです。

よろしくお願いいたします。
