7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-07

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にはミリ秒単位で扱える関数がない?(あったら教えてください。)
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?