Line
linebot
LINEmessagingAPI

LINEのMessaging APIで送られてくるタイムスタンプの変換にはまった

LINE Messaging APIのWebhockで送られてくるデータ

{
  "events": [
    {
      "replyToken": "(replyToken)",
      "type": "message",
      "timestamp": 1502147710132,
      "source": {
        "type": "user",
        "userId": "(userId)"
      },
      "message": {
        "id": "(messageId)",
        "type": "text",
        "text": "Hello, world"
      }
    }
  ]
}

このtimestampをPHPで文字列に変換しようとした。

コード

echo date('Y-m-d H:i:s', $event['timestamp']); // =>"49571-03-03 05:48:52"

なぜか49571年03月03日 05:48:52とかになる。

原因

APIから送られてくるtimestampはミリ秒単位だった。

解決策

ミリ秒単位で送られてくるならこっちで秒単位に直せばいいよね

  • ミリ秒単位のタイムスタンプを1000で割れば秒単位になる。
  • タイムスタンプのデータ型はint型
  • 別に秒単位の精度で問題ない

解決したコード

echo date('Y-m-d H:i:s', ($event['timestamp'] / 1000)); // =>"2017-08-08 08:15:10"

わかったこと

  • ちゃんとAPIリファレンスは読みましょう。
  • データは必要な精度まででいい。
  • PHPにはミリ秒単位で扱える関数がない?(あったら教えてください。)