質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

3091閲覧

PHPで16桁のタイムスタンプの変換

nazo

総合スコア4

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/09/01 01:16

初歩的なことかと思うのですが、マニュアルにも掲載なく、どうしてもわかりません。

PHPからデータベースに保存した日付があります。

MySQLを使いますが、CURRENT_TIMESTAMP(6)は使わず、PHPで16桁のタイムスタンプを取得してからINSERTする流れです。
(PHPの別の場所でそのタイムスタンプを使うため、CURRENT_TIMESTAMP(6)でなくPHPでタイムスタンプを生成します。)

で、そうしてできた16桁のタイムスタンプを、日付の形式に変換したいのですが、どうやるのでしょうか?

具体的に、以下15989220959519092020-09-01 01:01:35.951909に変換したいです。

$time = 1598922095951909;

下記などで試したのですが、そのようにならず、マニュアルを見ても16桁のサンプルがなく、困惑状態です。

$format = "Y-m-d H:i:s"; echo new DateTime( $time )->format( $format ); echo date( $format, $time );

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/09/01 01:23

1598922095951909 をどう解釈して 2020-09-01 01:01:35.951909になるんでしょうか。 その法則を追記してください
nazo

2020/09/01 01:45

優しい心(1598922095951909)= 2020-09-01 01:01:35.951909
guest

回答4

0

ベストアンサー

おそらく、その数値はmicrotimeで得られたマイクロ秒単位のUnixタイムスタンプですね。

秒単位のUnixタイムスタンプをdateの第2引数に渡して、マイクロ秒部分を"."で結合すればいいでしょう。

PHP

1$time = 1598922095951909; 2$datestr = date("Y-m-d H:i:s", floor($time / 1000000)) . "." . ($time % 1000000); 3echo $datestr;

result

12020-09-01 01:01:35.951909

投稿2020/09/01 01:35

編集2020/09/01 01:37
Daregada

総合スコア11990

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo

2020/09/01 01:43

ありがとうございます。納得です。
guest

0

DateTime クラスなら、全桁をオブジェクトとして持つことが可能です。

php

1<?php 2$time = DateTime::createFromFormat('U.u', substr_replace("1598922095951909", ".", 10, 0)); 3echo $time->format('Y-m-d H:i:s.u');

ただ、全体が見れてないので勘ですが、色々と方向性がおかしい気がします。

追記
仕様上はこっちの方がよさげ。

php

1<?php 2$time = DateTime::createFromFormat('U.u', substr_replace("1598922095951909", ".", -6, 0)); 3echo $time->format('Y-m-d H:i:s.u');

投稿2020/09/01 02:02

編集2020/09/01 02:33
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

1598922095951909

まず、必ずこの形で渡されることを保証しなければいけません。

この文字列は二つに分けられます。

1, 1598922095
2, 951909

それを踏まえると以下のコードが書けます。

php

1 2$time = 1598922095951909; 3 4$date = mb_substr( $time, 0, 10 ); 5$micro_s = mb_substr( $time, 10 ); 6 7echo date('Y-m-d H:i:s', $date).'.'.$micro_s;

投稿2020/09/01 01:38

kyoya0819

総合スコア10429

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo

2020/09/01 01:45

自力で繋げるのですね。ありがとうございます。
guest

0

提示されたのは「秒」なので50669794年3月11日 5時18分29秒ですね。
ドキュメントにもきちんと辿るとエポック「秒」と記載があります。
2020-09-01 01:01:35.951909にしたいのでしたら「ミリ秒」にしてください。

1598922095.951909

投稿2020/09/01 01:36

編集2020/09/01 01:38
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nazo

2020/09/01 01:46

仰る通り、ミリ秒でした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問