web-dev-qa-db-ja.com

PHP)のミリ秒単位の日時からタイムスタンプまで

入力「2016-03-2214:30」からミリ秒単位のタイムスタンプを作成したいと思います。また、指定するタイムゾーンはオーストラリア/シドニーである必要があります。

私はさまざまなアプローチを試しましたが、どれも機能していないようです。

誰か助けてくれませんか?私は本当にそれに苦労しています。

5
Hyacinthe

かなり自明のコードなので、あまり言いません。

date_default_timezone_set('Australia/Sydney'); // set timezone
$yourdate = '2016-03-22 14:30';
$stamp = strtotime($yourdate); // get unix timestamp
$time_in_ms = $stamp*1000;

正しく表示したい場合。

echo number_format($time_in_ms, 0, '.', '');
10
Kylie

タイムゾーンを3番目のパラメーターとして渡しながら、createFromFormatDateTimeメソッド、またはより適切にはDateTimeImmutableを使用できます。このように、デフォルトのタイムゾーンに依存する必要はありません。これは決して良い考えではありません。

$datetime = DateTimeImmutable::createFromFormat('Y-m-d H:i', '2016-03-22 14:30', new DateTimeZone('Australia/Sydney'));
echo $datetime->getTimestamp();
echo $datetime->format(DateTime::ISO8601);

別のタイムゾーンに変換することもできます。新しいDateTimeImmutableが生成され、元の状態はそのままになっていることに注意してください。

echo $utcTzDatetime = $date->setTimezone(new DateTimeZone('UTC'));
echo $utcTzDatetime->format(DateTime::ISO8601);
echo $datetime->format(DateTime::ISO8601);

更新:

形式が固定されていない場合は、DateTimeに推測させることができます。

new DateTimeImmutable($time, new DateTimeZone('Australia/Sydney'));

ただし、$time文字列にタイムゾーンまたはオフセットが含まれています(例:「2016-03-22T14:30-0500」)。タイムゾーンパラメータよりも優先され、タイムスタンプが異なります。

1
Xerkus

これを試してみてください

<?php
$date = new DateTime('@'.strtotime('2016-03-22 14:30'), new DateTimeZone('Australia/Sydney'));

echo "Timestamp in Australia/Sydney: ".$date->format('Y-m-d H:i:sP');
echo "<br/>";
echo "Timestamp in miliseconds Australia/Sydney: ".strtotime($date->format('Y-m-d H:i:sP'));
?>

出力:

Timestamp in Australia/Sydney: 2016-03-22 18:30:00+00:00
Timestamp in miliseconds Australia/Sydney: 1458671400
1
Rohit Raj Verma

カーボンパッケージを使用している場合は、次を使用できます

Carbon::parse('2009-09-22 16:47:08.128')->micro

これにより、マイクロ秒単位の時間が返されます。これを1000で割り、同じ日付のエポックタイムスタンプ(秒単位)と連結することができます。
日付形式にミリ秒の要素がない場合は、0をマイクロ秒として取得し、連結する前にその0に余分なゼロを埋め込む必要があることを確認してください。

0
Sahil
date_default_timezone_set("Australia/Sydney");
echo strtotime('2016-03-22 14:30') * 1000;

出力:1458617400000

0
disconnected

この方法を簡単に試してください

<?php
$time = microtime(true);
$datetime = new DateTime();
$datetime->setTimestamp($time);
$format = $datetime->format('Y-m-d H:i:s');
var_dump($format);
?>
0