it-swarm-eu.dev

Jak převést datum na časové razítko v PHP?

Jak získám časové razítko, např. 22-09-2008?

308
Wizard4U

PHP strtotime() dává

$timestamp = strtotime('22-09-2008');

Která pracuje s Podporované formáty data a času Dokumenty .

568
Owen

Existuje také strptime() který očekává přesně jeden formát:

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

S DateTime API :

$dateTime = new DateTime('2008-09-22'); 
echo $dateTime->format('U'); 

// or 

$date = new DateTime('2008-09-22');
echo $date->getTimestamp();

Stejně jako procedurální API:

$date = date_create('2008-09-22');
echo date_format($date, 'U');

// or

$date = date_create('2008-09-22');
echo date_timestamp_get($date);

Pokud výše uvedené selže, protože používáte formát unsupported , můžete použít

$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008');
echo $dateTime->format('U'); 

// or

$date = date_parse_from_format('!d-m-Y', '22-09-2008');
echo date_format($date, 'U');

Všimněte si, že pokud nenastavíte !, časová část bude nastavena na aktuální čas, který se liší od prvních čtyř, které použijí půlnoc, když vynecháte čas.

Další alternativou je použití rozhraní API IntlDateFormatter :

$formatter = new IntlDateFormatter(
    'en_US',
    IntlDateFormatter::FULL,
    IntlDateFormatter::FULL,
    'GMT',
    IntlDateFormatter::GREGORIAN,
    'dd-MM-yyyy'
);
echo $formatter->parse('22-09-2008');

Pokud nepracujete s řetězci s lokalizovaným datem, je pravděpodobnější volba DateTime.

120
Gordon

Buďte opatrní s funkcemi, jako je strtotime(), které se snaží "hádat", co máte na mysli (to samozřejmě není, pravidla jsou zde ).

Opravdu 22-09-2008 bude analyzováno jako 22. září 2008, protože je to jediná rozumná věc. 

Jak bude 08-09-2008 analyzován? Pravděpodobně 9. srpna 2008

A co 2008-09-50? Některé verze PHP analyzují tento text jako 20 Říjen 2008.

Takže pokud jste si jisti, že váš vstup je ve formátu DD-MM-YYYY, je lepší použít řešení nabízené @Armin Ronacher .

114
daremon


Pokud máte PHP 5.3 nebo vyšší,

tato metoda pracuje na oba Windows a Unix a je časové pásmo vědomé, což je pravděpodobně to, co chcete, pokud máte vážně práci s daty.

Pokud se nestaráte o časové pásmo nebo chcete použít časové pásmo, které server používá:

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
echo $d->getTimestamp();

1222093324 (Toto se bude lišit v závislosti na časové zóně serveru ...)


Pokud chcete určit, ve které časové zóně, zde EST. (Stejné jako New York.)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('EST'));
echo $d->getTimestamp();

1222093305


Nebo pokud chcete použít UTC. (Stejné jako "GMT".)

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008', new DateTimeZone('UTC'));
echo $d->getTimestamp();

1222093289


47
Prof. Falken

Používání Mktime :

list($day, $month, $year) = explode('-', '22-09-2008');
echo mktime(0, 0, 0, $month, $day, $year);
43
Till

Pomocí funkce strtotime () můžete snadno převést datum na časové razítko 

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

Více informací: http://php.net/manual/en/function.strtotime.php

Nástroj pro online konverzi: http://freeonlinetools24.com/

17
klit67

Zde je velmi jednoduché a efektivní řešení využívající funkce split a 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);

Fungovalo to jako kouzlo pro mě.

13
Victor Bojica

Vzhledem k tomu, že funkce strptime() nefunguje pro Windows a strtotime() může vrátit neočekávané výsledky, doporučuji použít 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']);
7
Victor

Chcete-li vědět, zda je datum analyzováno na něco, co očekáváte, můžete použít DateTime::createFromFormat():

$d = DateTime::createFromFormat('d-m-Y', '22-09-2008');
if ($d === false) {
    die("Woah, that date doesn't look right!");
}
echo $d->format('Y-m-d'), PHP_EOL;
// prints 2008-09-22

V tomto případě je to zřejmé, ale např. 03-04-2008 může být 3. dubna nebo 4. března v závislosti na tom, odkud pocházíte:

6
Ja͢ck
<?php echo date('M j Y g:i A', strtotime('2013-11-15 13:01:02')); ?>

http://php.net/manual/en/function.date.php

5
Michael Chambers

Pokud znáte formát strptime, protože strtotime hádá formát, který nemusí být vždy správný. Vzhledem k tomu, že strptime není implementováno ve Windows, existuje vlastní funkce

Nezapomeňte, že hodnota návratu tm_year je od roku 1900! a tm_month je 0-11

Příklad:

$a = strptime('22-09-2008', '%d-%m-%Y');
$timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900)
5
blavla
$time = '22-09-2008';
echo strtotime($time);
5
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
4
Phil Jackson

Zde je návod, jak bych to udělal:

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'];

Tímto způsobem necháte funkci vědět, jaký formát data používáte, a dokonce určete časové pásmo.

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

Pokud chcete, vložte jej do časové značky typu MySQL input type. Výše uvedené funguje velmi dobře (pouze v PHP 5 nebo novějších):

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

Prosím, dávejte pozor na čas/zónu, pokud jste nastavili, aby se data ukládala do databáze, protože jsem dostal problém, když jsem porovnávala data z mysql, která byla převedena na timestamp pomocí strtotime. musíte použít přesně stejný čas/zónu před převedením data na časovou značku jinak, strtotime () použije výchozí časové pásmo serveru.

Viz tento příklad: https://3v4l.org/BRlmV

function getthistime($type, $modify = null) {
    $now = new DateTime(null, new DateTimeZone('Asia/Baghdad'));
    if($modify) {
        $now->modify($modify);
    }
    if(!isset($type) || $type == 'datetime') {
        return $now->format('Y-m-d H:i:s');
    }
    if($type == 'time') {
        return $now->format('H:i:s');
    }
    if($type == 'timestamp') {
        return $now->getTimestamp();
    }
}
function timestampfromdate($date) {
    return DateTime::createFromFormat('Y-m-d H:i:s', $date, new DateTimeZone('Asia/Baghdad'))->getTimestamp();
}

echo getthistime('timestamp')."--".
    timestampfromdate(getthistime('datetime'))."--".
    strtotime(getthistime('datetime'));

//getthistime('timestamp') == timestampfromdate(getthistime('datetime')) (true)
//getthistime('timestamp') == strtotime(getthistime('datetime')) (false)
1
Akam

Použijte funkci PHP funkce strtotime ()

echo strtotime („2019/06/06“);

date - Formátovat místní čas/datum

0
Gurpreet Singh