PHP başka içine bir tarih biçimini dönüştürmek

7 Cevap php

PHP başka bir tarih biçime bir tarih biçimini dönüştürmek için basit bir yolu var mı?

Ben bu var:

$old_date = date('y-m-d-h-i-s');            // works

$middle = strtotime($old_date);             // returns bool(false)

$new_date = date('Y-m-d H:i:s', $middle);   // returns 1970-01-01 00:00:00

Ama tabii ki mevcut bir tarih yerine şafak o çatlak 'dönmek istiyorum gibi. Ben yanlış ne yapıyorum?

7 Cevap

date() için ikinci parametre (1 Ocak 1970 tarihinden beri saniye) uygun bir zaman damgası olması gerekir. Sen () tanıyamaz hangi tarih, bir dize geçiyor.

Sen strtotime() to convert a date string into a timestamp. However, even strtotime() doesn't recognize the y-m-d-h-i-s formatı kullanabilirsiniz.

PHP 5.3 and up

Ile gelen dize tarihleri ​​ayrıştırmak - DateTime::createFromFormat . It allows you to specify an exact mask - using the date() sözdizimi kullanın.

PHP 5.2 and lower

Sen mktime() bir inşa edeceğini el substr() kullanılarak (ikinci yıl, ay, gün, saat, dakika) elemanları ayrıştırmak ve sonuçları teslim etmek zorunda kalacak zaman damgası.

Ama bu işin bir sürü! I strftime () anlayabileceği bir farklı biçimi kullanmanızı öneririz. strftime () any tarih giriş the next time joe will slip on the ice kısa anlar. Örneğin, bu çalışır:

$old_date = date('l, F d y h:i:s');              // returns Saturday, January 30 10 02:06:34
$old_date_timestamp = strtotime($old_date);
$new_date = date('Y-m-d H:i:s', $old_date_timestamp);   

Bunu yapmanın en kolay yolu

$myDateTime = DateTime::createFromFormat('Y-m-d', $dateString);
$newDateString = $myDateTime->format('m/d/Y');

Önce biçimi $ dateString Sonra Eğer $ newDateString inç olmak istiyorum biçimi anlatıyorsun inç olduğunu bunu veriyoruz

Bu da zaman zaman çalışmak için zor olabilir strtotime kullanımını önler.

Eğer başka bir tarih biçiminden dönüştürme, ama sadece belirli bir biçimde Geçerli tarihi (veya datetime) istemiyorsanız, o zaman daha da kolay:

$now = new DateTime();
$timestring = $now->format('Y-m-d h:m:s');

Bu, diğer bir soru da aynı konuya değinmektedir: PHP: convert date format yyyy-mm-dd => dd-mm-yyyy [NOT IN SQL].

Bu deneyin:

$old_date = date('y-m-d-h-i-s');
$new_date = date('Y-m-d H:i:s', strtotime($old_date));

Sen date function ikinci argüman olarak bir zaman damgası gerektirir, geri bir zaman damgası içine $ old_date dönüştürmek gerekir.

$old_date = date('y-m-d-h-i-s');       // works

burada yanlış yapıyorsun, bu olmalı

$old_date = date('y-m-d h:i:s');       // works

zaman ayırıcı ':'


Ben bu yardımcı olacağını düşünüyorum ...

$old_date = date('y-m-d-h-i-s');              // works

preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_VEYADER);
$out = $out[0];
$time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]);

$new_date = date('Y-m-d H:i:s', $time); 

VEYA


$old_date = date('y-m-d-h-i-s');              // works

$out = explode('-', $old_date);
$time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]);

$new_date = date('Y-m-d H:i:s', $time); 

strtotime olduğunu çalışacaktır. Sadece tarihler bize formatında aynı ve hepsi değildir.

<?php
$e1 = strtotime("2013-07-22T12:00:03Z");
echo date('y.m.d H:i', $e1);
echo "2013-07-22T12:00:03Z";

$e2 = strtotime("2013-07-23T18:18:15Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-23T18:18:15Z";

$e1 = strtotime("2013-07-21T23:57:04Z");
echo date ('y.m.d H:i', $e2);
echo "2013-07-21T23:57:04Z";
?>

The Basics

Başka içine bir tarih biçimini dönüştürmek için simplist yolu strtotime() with date() . strtotime() bir Unix Timestamp içine tarih dönüştürmek kullanmaktır. Unix Zaman Damgası sonra geçirilen olabilir date() bu yeni biçime dönüştürmek.

$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);

Ya da bir-astar olarak:

$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));

strtotime() bir valid format olmak üzere tarih gerektirdiğini unutmayın. Geçerli bir biçimi sağlamak için Failuer strtotime() tarih 1969-12-31 neden olacaktır hangi yanlış dönen neden olacaktır.

Using DateTime()

PHP 5.2 itibariyle, PHP DateTime() class which offers us more powerful tools for working with dates (and time). We can rewrite the above code using DateTime() böylece sundu:

$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = date->format('Y-m-d H:i:s');

Working with non-standard and ambiguous date formats

Ne yazık ki bir geliştirici ile çalışmak zorunda değil tüm tarih biçimi geçerli bulunmaktadır. Neyse PHP 5.3 bunun için bir çözüm sağladı. DateTime::createFromFormat() bize bir tarih dizesi bu yüzden başarılı başka işlemler için bir tarih nesnesine çözümlenebilir olduğunu ne biçim PHP söylemesini sağlar.

$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = date->format('Y-m-d H:i:s');

PHP 5.4 olarak bize bir tek-liner içine bizim DateTime() kodunu açmak için izin veren eklenmiştir örnekleme üzerinde sınıf üyesi erişim yapmak için yeteneğini kazandı:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');

Ne yazık ki bu DateTime::createFromFormat() henüz çalışmıyor.