Преобразование метки времени в формат даты mongodb [дубликат]

Как уже говорилось много раз - с div ~ p выбраны все элементы

, которым предшествует элемент

.

Проверьте этот список все селектор CSS.

43
задан Andy Hin 25 August 2010 в 19:24
поделиться

5 ответов

$date = new DateTime($dateStr, new DateTimeZone($timezone));

$timestamp = $date->format('U');

65
ответ дан Rupert 19 August 2018 в 12:26
поделиться
  • 1
    Мне не нужно указывать, из какого времени я конвертирую? Или это просто конвертировать из PHP по умолчанию? – Andy Hin 25 August 2010 в 19:26
  • 2
    @whydna, вы не конвертируете все (если я не ошибаюсь). Код создает представление этой даты в указанном часовом поясе. – salathe 25 August 2010 в 19:29
  • 3
    Я думаю, вы конвертируете. Потому что, имеет значение, каков исходный часовой пояс для $ dateStr. Поэтому вам нужно как-то указать, в какой временной зоне вы конвертируете TO и какой часовой пояс вы конвертируете FROM. Но ваш пример будет работать, потому что часовой пояс, в котором он преобразует FROM, является часовым поясом php по умолчанию. – Andy Hin 25 August 2010 в 19:38
  • 4
    @whydna Нет, вы не конвертируете. Вы интерпретируете строку даты, как если бы она ссылалась на указанный часовой пояс. Чтобы преобразовать вас в новый $d = new DateTime($dateStr, $timezonefrom); $d->setTimezone($timezoneto);. – Artefacto 25 August 2010 в 19:51
  • 5
    @Artefacto - если мой $ dateStr = '2008-09-11 00:00:00' не имеет значения, является ли это исходное представление в EST или PST? Временная метка будет отличаться в зависимости от того, какой она есть, нет? Может быть, я просто смущен: S – Andy Hin 25 August 2010 в 20:05

Это будет работать, если по какой-то причине вы используете & lt; 5.2 (Heaven forbid).

$reset = date_default_timezone_get();
date_default_timezone_set('America/New_York');
$stamp = strtotime($dateStr);
date_default_timezone_set($reset);

Но что-нибудь 5.2 и выше, я настоятельно рекомендую вам выбрать ответ @ salathe.

15
ответ дан Jonah 19 August 2018 в 12:26
поделиться
  • 1
    работает, но не забудьте изменить его обратно! я думаю, что решение salathes лучше – The Surrican 25 August 2010 в 19:28
  • 2
    Что значит «изменить его назад»? Да, 1 линия против 4 линий. Хммм. : D – Jonah 25 August 2010 в 19:33
  • 3
    Это решение (что не совсем то, что хочет OP, и именно поэтому я сделал его комментарием) отлично, если все приложение должно работать в определенном часовом поясе для этого процесса - просто не так элегантно, как требуется в одно время. – Dan Heberden 25 August 2010 в 20:26
  • 4
    Sidenote: в версии 5.5 и выше, strtotime() всегда будет давать seconds since epoch для UTC. Таким образом, используйте класс DateTime, как уже рекомендовано в этом ответе – Fr0zenFyr 15 March 2018 в 11:22

Всякий раз, когда вы обращаетесь к точному моменту времени, сохраняйте время в соответствии с единым стандартом, на который не влияет дневная экономия. (GMT и UTC эквивалентны в этом отношении, но предпочтительно использовать термин UTC. Обратите внимание, что UTC также известен как Zulu или Z time.)

Если вместо этого вы решили сохранить время, используя локальное значение времени, включают местное смещение по времени от UTC, так что временная метка может быть позже интерпретирована однозначно.

В некоторых случаях вам может потребоваться сохранить время UTC и эквивалентное местное время. Часто это делается с двумя отдельными полями, но некоторые платформы поддерживают тип datetimeoffset, который может хранить оба в одном поле.

При сохранении временных меток в качестве числового значения используйте время Unix - это число целого секунд с 1970-01-01T00: 00: 00Z (исключая секунды прыжка). Если вам требуется более высокая точность, вместо этого используйте миллисекунды. Это значение всегда должно основываться на UTC без какой-либо регулировки часового пояса.

Если позже вам понадобится изменить временную метку, укажите исходный идентификатор часового пояса, чтобы вы могли определить, может ли смещение измениться с оригинальное значение записано.

При планировании будущих событий обычно предпочитается местное время вместо UTC, так как обычно это смещение изменяется. См. Ответ и сообщение в блоге.

Помните, что смещения часовых поясов не всегда являются целым числом часов (например, индийское стандартное время - UTC + 05: 30, а Непал использует UTC + 05: 45) .

Если вы используете Java, используйте java.time для Java 8 или используйте Joda Time для Java 7 или ниже. Если вы используете .NET, подумайте об использовании Noda Time. Если вы используете .NET без времени Noda, считайте, что DateTimeOffset часто является лучшим выбором, чем DateTime. Если вы используете Perl, используйте DateTime. Если вы используете Python, используйте pytz или dateutil. Если вы используете JavaScript, используйте moment.js с расширением момента времени. Если вы используете PHP> 5.2, используйте преобразования собственных часовых поясов, предоставляемые классами DateTime и DateTimeZone. Будьте осторожны при использовании.

DateTimeZone :: listAbbreviations () - см. Ответ. Чтобы поддерживать PHP в актуальных данных Olson, периодически устанавливайте пакет PECL timezonedb; см. ответ.

Если вы используете C ++, обязательно используйте библиотеку, которая использует правильно реализует базу данных часовых поясов IANA. К ним относятся cctz, ICU и библиотека «tz» Говарда Хиннанта.

Не используйте Boost для преобразования часовых поясов. Хотя его API утверждает, что поддерживает стандартные идентификаторы IANA (aka «zoneinfo»), он грубо сопоставляет их с фиксированными смещениями, не учитывая богатую историю изменений, которые каждая зона могла иметь.

(Кроме того, файл выпал из обслуживания.)

Большинство бизнес-правил используют гражданское время, а не UTC или GMT. Поэтому планируйте преобразовать метки времени UTC в локальный часовой пояс перед применением прикладной логики.

Помните, что временные зоны и смещения не являются фиксированными и могут меняться. Например, исторически США и Великобритания использовали те же даты, что и «весна вперед» и «отступать».

Однако в 2007 году США изменили даты, в которые часы меняются. Это означает, что в течение 48 недель в году разница между лондонским временем и временем в Нью-Йорке составляет 5 часов и 4 недели (3 весной, 1 осенью) - 4 часа. Помните о таких элементах в любых вычислениях, которые включают несколько зон.

Рассмотрим тип времени (фактическое время события, время трансляции, относительное время, историческое время, повторяющееся время), какие элементы (временная метка, часовой пояс смещение и имя часового пояса), необходимо сохранить для правильного поиска - см. «Типы времени» в ответ.

Хранить файлы синхронизации ОС, базы данных и приложений в синхронизации, между собой и остальным миром .

На серверах установите аппаратные часы и часы ОС в UTC, а не в локальный часовой пояс.

Независимо от предыдущей точки маркера серверный код, включая веб-сайты, должен никогда не ожидайте, что местный часовой пояс сервера будет чем-то конкретным. см. ответ.

Использовать службы NTP на всех серверах.

Если вы используете FAT32, помните, что временные метки сохраняются в локальное время, а не UTC.

При работе с повторяющиеся события (например, еженедельное ТВ-шоу), помните, что время изменяется с помощью DST и будет отличаться по часовым поясам.

Всегда запрашивать значения даты-времени как включенные в нижнюю границу, эксклюзивные ограничения сверху ( > =, & lt;).

2
ответ дан M.R.Safari 19 August 2018 в 12:26
поделиться

Принятый ответ велик, если вы используете PHP> 5.2 (я думаю, что это версия, в которую они добавили класс DateTime). Если вы хотите поддерживать более старую версию, вы не хотите вводить столько, или если вы просто предпочитаете функциональный подход, существует другой способ, который также не изменяет глобальные настройки:

$dateStr = '2008-09-11 00:00:00';
$timezone = 'America/New_York';
$dtUtcDate = strtotime($dateStr. ' '. $timezone);
17
ответ дан octern 19 August 2018 в 12:26
поделиться
  • 1
    Я не вижу, как принятый ответ изменяет глобальные настройки. – Sebastian Mach 26 August 2015 в 11:54
  • 2
    Это не так. Он использует классы и требует PHP & gt; 5.2. Это был ответ Джона, который изменил глобальные настройки. – krowe 26 August 2015 в 13:26

Если вы собираетесь использовать Timezones, я предлагаю вам использовать класс DateTime, и в этом случае функция DateTime :: createFromFormat (), которая позволит вам делать такие сеансы:

$start = "2015-01-14 11:59:43";
$timezone = "America/Montreal";

$tz = new DateTimeZone($timezone);
$dt = DateTime::createFromFormat('Y-m-d H:i:s', $start, $tz);

Когда вы помещаете $ tz в функцию DateTime :: createFromFormat, вы указываете, в каком часовом поясе дана дата, так что, когда вам нужно преобразовать ее в другой часовой пояс, все, что вам нужно сделать, это что-то вроде этого:

$start = $dt->setTimeZone(new DateTimeZone('UTC'));
3
ответ дан Philippe Gilbert 19 August 2018 в 12:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: