本資料は、PostgreSQLからtimestamp型の日時文字列を取得した時、秒以下の値を含む文字列が返却されました。 PostgreSQLの日付時刻関連の関数を使用しSQLで対処できますが、本記事ではPHPで対処する場合の資料です。
PostgreSQLのtimestamp型で処理したとき、以下のように秒以下の値が返却されました。
sakura=# select date from t1; date ---------------------------- 2012-05-17 13:26:16.209357 (1 行)
以下のように日付時刻関連の関数である、date_truncを利用すればよいのですが、この記事ではPHPで対処することにしました。
sakura=# select date_trunc('second',date) from t1; date_trunc --------------------- 2012-05-17 13:26:16 (1 行)
文字列日時をPHPの日付時刻関連の関数をつかって操作できますが、本資料では、vsprintfとsscanfを利用して実現しまいた。
サンプルソースは以下の通りです。
<?php $in="2012-05-17 13:26:16.209357"; $out=vsprintf("%d-%02d-%02d %02d:%02d:%02d", sscanf($in, "%d-%d-%d %d:%d:%d")); echo $out; ?>
$inには秒以下の値を含む日時文字列です。
vsprintf, sscanfを使用しフォーマットを整形し$outに格納しています。
実際の動作は以下の通りです。
コマンドラインから本スクリプトを動かした結果です。
$ php dateconv.php 2012-05-17 13:26:16
以上、文字列日時のフォーマット整形について記述しました。