Дата и время в миллисекундах в переполнении стека

Я хотел бы создать метку времени в миллисекундах из ввода «2016-03-22 14:30».
Также указывается часовой пояс Австралия / Сидней.

Я пробовал разные подходы, но ни один из них не работает.

Кто-нибудь может мне помочь? Я действительно борюсь с этим.

3

Решение

Довольно понятный код, поэтому я не буду много говорить.

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, '.', '');
7

Другие решения

Попробуйте это будет работать

<?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

Ты можешь использовать createFromFormat метод DateTime или лучше, 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);

Upd:

Если формат не фиксированный, вы можете позволить DateTime угадать его:

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

Но учтите, что если $time Строка содержит часовой пояс или смещение, например, «2016-03-22T14: 30-0500», оно будет иметь приоритет над параметром часового пояса и приведет к другой отметке времени!

1

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

Выход: 1458617400000

0

Если вы используете пакет углерода, то вы можете использовать

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

Это вернет вам время в микросекундах. Вы можете разделить это на 1000 и объединить это с отметкой времени эпохи той же даты в секундах.
Просто убедитесь, что если в формате даты нет миллисекундного компонента, вы получите 0 в микросекундах, и вам придется дополнить этот 0 дополнительными нулями перед объединением.

0
По вопросам рекламы [email protected]