日最低気温から生育期間の日数を計算
生育期間計算ツールは、1暦年分の日最低気温を、霜のない期間として分かりやすく数値化します。7月1日より前の最後の霜と、同日以降の最初の霜を特定し、その間の経過日数を返します。霜とみなす温度は指定でき、既定値は0 °Cです。外部の気象サービスを使わない決定論的な計算であり、境界となる霜が見つからない場合は、不確かな推定値を出さずエラーとして通知します。
無料で実行
欠けのない日別気温系列をご用意ください
同じ暦年の1月1日から12月31日まで、1日につき1件の記録をご用意ください。各記録にはYYYY-MM-DD形式の暦日と、その日の最低気温を摂氏で含めます。記録は日付順に並べ、日付の欠落や重複がないようにしてください。この厳格な条件には理由があります。寒い日の記録が抜けると、その日を霜がなかったものとして扱い、生育期間を実際より長く算出するおそれがあるためです。したがって、平年は365件、うるう年は366件となります。霜の危険性は一日の平均気温や最高気温ではなく、最も寒い時間帯に関係するため、日最低気温を使用します。元データに欠測がある場合は、計算前に観測所または元のデータセットで確認し、補ってください。本ツールは観測値を補間しません。霜の判定温度も指定できます。既定値は0 °Cで、指定した温度以下の日最低気温を霜の日として扱います。すべての値を摂氏に統一し、年間を通じて同じ観測元を使用してください。
2つの霜の日付を選ぶ方法をご確認ください
北半球の年次データを対象として、7月1日を春と秋の検索期間を分ける固定境界にします。7月1日より前に霜と判定された日のうち、最も遅い日を春の終霜日とします。7月1日以降に霜と判定された日のうち、最も早い日を秋の初霜日とします。生育期間の日数は、この2つの日付間で経過した暦日数です。この規則により、気温の不規則な上下から季節を推測することなく、同じ入力から常に同じ結果を再現できます。最低気温が判定温度と等しい場合も霜に含まれるため、既定の設定では0 °Cも霜です。結果には境界となった両日が含まれますので、単一の数値だけを受け入れるのではなく、元の系列と照合できます。この方法が示すのは、入力した年に観測された温度条件です。将来予測、作付けの保証、平年値ではありません。南半球の地点では別の季節境界が必要なため、現在の対象外です。いずれかの検索期間に該当する霜がなければ、期間の両端を定義できず、エラーを返します。
結果を適切な目的でご利用ください
生育期間の日数は、年ごとの比較、作物適性の一次評価、観測所集計値の検算、霜の日付の長期変化を記録する際に役立ちます。ただし、完全な農業上の推奨ではなく、環境指標の一つとしてお使いください。作物によっては、選んだ霜の判定温度より高い気温でも低温障害を受けます。また、土壌、風、湿度、斜面、植生の影響により、圃場と気象観測所の温度が異なる場合があります。再現可能な比較には、毎年同じ観測所、温度の定義、品質管理手順、霜の判定温度をご利用ください。春の終霜日と秋の初霜日を期間日数と一緒に保存すれば、後から結果を決めた観測値を確認できます。APIで自動処理する場合、1回の基本料金は$0.002です。同じ決定論的な処理を対話形式でも利用できます。半年の検索期間に霜がない場合のエラーは意図した動作です。観測された2つの境界がないまま数値を出すと、入力に根拠のない仮定が必要になるためです。長期分析では複数年を一つの系列に連結せず、完全な年ごとに計算してから、適切な統計量で年次結果を要約してください。
活用例
農業年を比較する
毎年同じ判定温度で観測上の無霜期間を計算し、境界日と日数を比較できます。
観測所の集計を検算する
品質管理済みの日最低気温記録から、公表された生育期間の日数を再現できます。
作付け計画の資料を評価する
過去の生育期間を、対象地点に十分な無霜日数があるか検討する要素の一つとして使えます。
よくある質問
何度から霜として扱いますか?
日最低気温がfrost_threshold_c以下なら霜です。既定の判定温度は0 °Cです。
なぜ1暦年分のデータが必要ですか?
寒い日の欠測を霜のない天候と誤認しないよう、年間を完全に網羅する必要があります。
生育期間の日数はどのように数えますか?
春の終霜日から秋の初霜日までに経過した暦日数を返します。
霜が一度もない場合はどうなりますか?
どちらかの検索期間に判定温度以下の日がなければ、入力エラーを返します。
南半球の季節にも使えますか?
いいえ。本版は北半球向けに7月1日を季節の境界として使用します。
APIの利用料金はいくらですか?
1回あたりの基本料金は$0.002です。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/earth/growing-season-length \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"daily_temperatures":[{"date":"2026-07-24","min_temperature_c":1},{"date":"2026-07-24","min_temperature_c":1}]}'const res = await fetch("https://api.kit.forhosting.com/earth/growing-season-length", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"daily_temperatures": [
{
"date": "2026-07-24",
"min_temperature_c": 1
},
{
"date": "2026-07-24",
"min_temperature_c": 1
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/growing-season-length",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"daily_temperatures": [
{
"date": "2026-07-24",
"min_temperature_c": 1
},
{
"date": "2026-07-24",
"min_temperature_c": 1
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/growing-season-length", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"daily_temperatures":[{"date":"2026-07-24","min_temperature_c":1},{"date":"2026-07-24","min_temperature_c":1}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"daily_temperatures":[{"date":"2026-07-24","min_temperature_c":1},{"date":"2026-07-24","min_temperature_c":1}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/growing-season-length", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"daily_temperatures": [
{
"date": "2026-07-24",
"min_temperature_c": 1
},
{
"date": "2026-07-24",
"min_temperature_c": 1
}
]
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.growing_season_length",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 366 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |