php - linux timestamp to date




Como converter data em timestamp em PHP? (13)

Aqui está como eu faria:

function dateToTimestamp($date, $format, $timezone='Europe/Belgrade')
{
    //returns an array containing day start and day end timestamps
    $old_timezone=date_timezone_get();
    date_default_timezone_set($timezone);
    $date=strptime($date,$format);
    $day_start=mktime(0,0,0,++$date['tm_mon'],++$date['tm_mday'],($date['tm_year']+1900));
    $day_end=$day_start+(60*60*24);
    date_default_timezone_set($old_timezone);
    return array('day_start'=>$day_start, 'day_end'=>$day_end);
}

$timestamps=dateToTimestamp('15.02.1991.', '%d.%m.%Y.', 'Europe/London');
$day_start=$timestamps['day_start'];

Dessa forma, você permite que a função saiba qual formato de data está usando e até mesmo especifica o fuso horário.

Como faço para obter o timestamp de, por exemplo, 22-09-2008 ?


Aqui está uma solução muito simples e eficaz usando as funções split e mtime :

$date="30/07/2010 13:24"; //Date example
list($day, $month, $year, $hour, $minute) = split('[/ :]', $date); 

//The variables should be arranged according to your date format and so the separators
$timestamp = mktime($hour, $minute, 0, $month, $day, $year);
echo date("r", $timestamp);

Funcionou como um encanto para mim.


Dado que a função strptime() não funciona para o Windows e strtotime() pode retornar resultados inesperados, eu recomendo usar date_parse_from_format() :

$date = date_parse_from_format('d-m-Y', '22-09-2008');
$timestamp = mktime(0, 0, 0, $date['month'], $date['day'], $date['year']);

Há também strptime() que espera exatamente um formato:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);

Se você conhece o formato, use strptime porque o strtotime adivinha o formato, que nem sempre está correto. Desde strptime não está implementado no Windows, há uma função personalizada

Lembre-se que o returnvalue tm_year é de 1900! e tm_month é de 0 a 11

Exemplo:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)

Se você deseja converter uma data e hora UTC ( 2016-02-14T12:24:48.321Z ) em timestamp, 2016-02-14T12:24:48.321Z como você faria isso:

function UTCToTimestamp($utc_datetime_str)
{
    preg_match_all('/(.+?)T(.+?)\.(.*?)Z/i', $utc_datetime_str, $matches_arr);
    $datetime_str = $matches_arr[1][0]." ".$matches_arr[2][0];

    return strtotime($datetime_str);
}

$my_utc_datetime_str = '2016-02-14T12:24:48.321Z';
$my_timestamp_str = UTCToTimestamp($my_utc_datetime_str);

Tenha cuidado com funções como strtotime() que tentam "adivinhar" o que você quer dizer (não adivinhe claro, as regras estão aqui ).

Na verdade 22-09-2008 será analisado como 22 de setembro de 2008 , como é a única coisa razoável.

Como 08-09-2008 será analisado? Provavelmente 09 de agosto de 2008 .

E quanto a 2008-09-50 ? Algumas versões do PHP analisam isto como 20 de outubro de 2008 .

Então, se você tem certeza de que sua entrada está no formato DD-MM-YYYY , é melhor usar a solução oferecida pelo @Armin Ronacher .


Usando a função strtotime (), você pode facilmente converter a data em timestamp

<?php
// set default timezone
date_default_timezone_set('America/Los_Angeles');

//define date and time
$date = date("d M Y H:i:s");

// output
echo strtotime($date);
?> 

Mais informações: http://php.net/manual/en/function.strtotime.php

Ferramenta de conversão online: http://freeonlinetools24.com/




function date_to_stamp( $date, $slash_time = true, $timezone = 'Europe/London', $expression = "#^\d{2}([^\d]*)\d{2}([^\d]*)\d{4}$#is" ) {
    $return = false;
    $_timezone = date_default_timezone_get();
    date_default_timezone_set( $timezone );
    if( preg_match( $expression, $date, $matches ) )
        $return = date( "Y-m-d " . ( $slash_time ? '00:00:00' : "h:i:s" ), strtotime( str_replace( array($matches[1], $matches[2]), '-', $date ) . ' ' . date("h:i:s") ) );
    date_default_timezone_set( $_timezone );
    return $return;
}

// expression may need changing in relation to timezone
echo date_to_stamp('19/03/1986', false) . '<br />';
echo date_to_stamp('19**03**1986', false) . '<br />';
echo date_to_stamp('19.03.1986') . '<br />';
echo date_to_stamp('19.03.1986', false, 'Asia/Aden') . '<br />';
echo date('Y-m-d h:i:s') . '<br />';

//1986-03-19 02:37:30
//1986-03-19 02:37:30
//1986-03-19 00:00:00
//1986-03-19 05:37:30
//2012-02-12 02:37:30

$time = '22-09-2008';
echo strtotime($time);

<?php echo date('U') ?>

Se você quiser, coloque-o em um timestamp tipo de entrada do MySQL . O acima funciona muito bem (somente no PHP 5 ou posterior):

<?php $timestamp_for_mysql = date('c') ?>




timestamp