Примечание. Неверно сформированное числовое значение, встречающееся в [duplicate]

В настоящее время в Python нет разделителя тысяч, но вы можете использовать модуль locale для преобразования строки с такими разделителями в int:

import locale
locale.setlocale(locale.LC_ALL, '')
locale.atoi("1,000,000")
56
задан arogachev 9 February 2016 в 05:52
поделиться

10 ответов

Не нужно explode ничего:

$str_time = "23:12:95";

$str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);

$time_seconds = $hours * 3600 + $minutes * 60 + $seconds;

И если вы не хотите использовать регулярные выражения:

$str_time = "2:50";

sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);

$time_seconds = isset($seconds) ? $hours * 3600 + $minutes * 60 + $seconds : $hours * 60 + $minutes;
95
ответ дан Tim Cooper 19 August 2018 в 12:07
поделиться

В псевдокоде:

split it by colon
seconds = 3600 * HH + 60 * MM + SS
4
ответ дан CanSpice 19 August 2018 в 12:07
поделиться
  • 1
    Это PHP? 8O – Ryan 29 January 2011 в 01:06
  • 2
    Как он писал, это псевдокод. & quot; Притворный код & quot; чтобы объяснить, как можно что-то сделать. – simme 29 January 2011 в 01:10
// HH:MM:SS or MM:SS
echo substr($time , "-2"); // returns last 2 chars : SS
-3
ответ дан Eray 19 August 2018 в 12:07
поделиться

Попробуйте следующее:

$time = "21:30:10";
$timeArr = array_reverse(explode(":", $time));
$seconds = 0;
foreach ($timeArr as $key => $value)
{
    if ($key > 2) break;
    $seconds += pow(60, $key) * $value;
}
echo $seconds;
5
ответ дан Glavić 19 August 2018 в 12:07
поделиться
  • 1
    Я люблю это! $ time = "01: 23: 54: 21: 30: 10" дает мне ответ 1087421410 секунд. – Roger Halliburton 29 January 2011 в 01:33
  • 2
    Попробуй это сейчас. Конечно, вы можете передать что-то вроде «898989: 8989898: 899899», но я предполагаю, что основные проверки будут выполняться во время, введенное до того, как код достигнет вычисления секунд. – Chandu 29 January 2011 в 01:37

Вы можете использовать функцию strtotime, чтобы вернуть количество секунд из today 00:00:00.

$seconds= strtotime($time) - strtotime('00:00:00');
0
ответ дан Ivan86 19 August 2018 в 12:07
поделиться
  • 1
    Хотя этот фрагмент кода может решить вопрос, , включая объяснение , действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин вашего предложения кода. Также попробуйте не толковать код с пояснительными комментариями, что уменьшает читаемость кода и объяснений! – Filnor 23 January 2018 в 13:19

Простой

function timeToSeconds($time)
{
     $timeExploded = explode(':', $time);
     if (isset($timeExploded[2])) {
         return $timeExploded[0] * 3600 + $timeExploded[1] * 60 + $timeExploded[2];
     }
     return $timeExploded[0] * 3600 + $timeExploded[1] * 60;
}
1
ответ дан midan888 19 August 2018 в 12:07
поделиться
<?php
$time    = '21:32:32';
$seconds = 0;
$parts   = explode(':', $time);

if (count($parts) > 2) {
    $seconds += $parts[0] * 3600;
}
$seconds += $parts[1] * 60;
$seconds += $parts[2];
0
ответ дан simme 19 August 2018 в 12:07
поделиться
  • 1
    Что, если это было всего 32:32 без часа? – Ryan 29 January 2011 в 01:08
  • 2
    Тогда это не сработает. Очевидно, вам необходимо сначала проверить формат. И удалите первые $ секунды + = часть – simme 29 January 2011 в 01:08
  • 3
    Как насчет массива flip $ parts? Я гений!!! – Ryan 29 January 2011 в 01:09
  • 4
    Как бы свернуть массив помощи? – simme 29 January 2011 в 01:10
  • 5
    ну, он рассчитывал бы правильно – Ryan 29 January 2011 в 01:11
    $time = 00:06:00;
    $timeInSeconds = strtotime($time) - strtotime('TODAY');
2
ответ дан sparsh turkane 19 August 2018 в 12:07
поделиться

Я думаю, что самым простым методом было бы использовать функцию strtotime():

$time = '21:30:10';
$seconds = strtotime("1970-01-01 $time UTC");
echo $seconds;

// same with objects (for php5.3+)
$time = '21:30:10';
$dt = new DateTime("1970-01-01 $time", new DateTimeZone('UTC'));
$seconds = (int)$dt->getTimestamp();
echo $seconds;

demo


Функция date_parse() также может использоваться для синтаксического анализа даты и времени:

$time = '21:30:10';
$parsed = date_parse($time);
$seconds = $parsed['hour'] * 3600 + $parsed['minute'] * 60 + $parsed['second'];

demo


Если вы проанализируете формат MM:SS с strtotime() или date_parse() он не сработает (date_parse() используется в strtotime() и DateTime), потому что когда вы вводите формат, подобный xx:yy, парсер предполагает, что он HH:MM, а не MM:SS , Я предлагаю проверить формат и добавить 00:, если у вас есть только MM:SS.

demo strtotime() demo date_parse()


Если у вас есть часы более 24, вы можете использовать следующую функцию (она будет работать в формате MM:SS и HH:MM:SS):

function TimeToSec($time) {
    $sec = 0;
    foreach (array_reverse(explode(':', $time)) as $k => $v) $sec += pow(60, $k) * $v;
    return $sec;
}

демонстрационная

84
ответ дан Timo Huovinen 19 August 2018 в 12:07
поделиться
  • 1
    Благодаря! Кстати: красивое форматирование ссылок! – Ilia Rostovtsev 4 May 2014 в 13:49
  • 2
    strtotime() не позволяет часам выходить за пределы 24 - использование 25 или выше вернет «false». – Sven 18 July 2015 в 18:33
  • 3
    @Sven: Я обновил ответ. – Glavić 18 August 2015 в 20:59
  • 4
    Ваш третий ответ в течение 24 часов - это именно то, что мне нужно. array_reverse и взорвется на :, затем вызывая еще одно прохождение через foreach и другое pow (так что оба hh: mm AND hh: mm: ss работа без модификации функции) - это гениальный штрих. Code par excellence. Я вряд ли могу представить более эффективный пример. Благодаря! – FirstFraktal 24 August 2015 в 04:26
  • 5
    Я только что посмотрел на первый ответ и подумал, что, если я использую эпоху Unix ... проголосуйте от меня! – Exit 5 October 2017 в 22:04
$time="12:10:05"; //your time
echo strtotime("0000-00-00 $time")-strtotime("0000-00-00 00:00:00");
-1
ответ дан user1425212 19 August 2018 в 12:07
поделиться
Другие вопросы по тегам:

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