2013-08-01 11 views
7

mam datę w formacie YDDD takiej 3212
chcę przekonwertować tę datę do Domyślnie ciąg daty tj. 2013-08-01 w PHP
Ponieważ pierwsza wartość Y jest jedyną postacią na rok, więc zdecydowałem się wziąć pierwsze trzy znaki z bieżącego roku, tj. 201 z 2013 roku
Poniżej znajduje się lista kod napisałem na rokPHP Jak inżynierii wstecznej dzień roku 3212 (YDDD) do 2013-08-01 (rrrr-mm-dd)

<?php 
$date = "3212" 
$y = substr($date,0,1); // will take out 3 out of year 3212 
$ddd = substr($date,1,3); // will take out 212 out of year 3212 
$year = substr(date("Y"),0,3) . $y; //well create year "2013" 
?> 

Teraz jak Mogę użyć $year i 212 aby przekształcić go w 2013-08-01 pomocą PHP

EDIT
FYI: Moja Wersja PHP jest 5.3.6

+1

skąd otrzymujesz datę w formacie 'YDDD'? –

+1

tym, jak zamierzasz odróżnić rok 2003 i 2013, więc na ?? i co do cholery te ostatnie 3 D oznacza? – swapnesh

+2

** jesteś poważny ?? ** data w formacie YDDD? a czemu to ?? po pierwsze, myślę, że musisz przejrzeć swój format daty ... pozwala powiedzieć 4122 .. więc który rok jest tym .. 1994,2004,1884 tak dalej? – bipen

Odpowiedz

8
$yddd = 3212; 
preg_match('/^(\d)(\d{3})$/', $yddd, $m); 

echo date('Y-m-d', strtotime("201{$m[1]}-01-01 00:00:00 +{$m[2]} days")); 
+0

działa dzięki (Y) .. http://phpfiddle.org/lite/code/2wk-yfu – zzlalani

+3

Dlaczego musimy wyodrębnić wszystkie rzeczy? – DesignerGuy

+1

@Designer Dlaczego nie? Uważam, że jest to bardziej eleganckie niż mnóstwo nieprzeniknionych 'substr's. :) – deceze

6

Jeśli używasz kodu w PHP 5.3 lub nowszy, możesz przekonwertować $ year i $ ddd na użyteczną datę, używając date_create_from_format. Na przykład:

$date = date_create_from_format("Y-z", "$year-$ddd"); 
echo date_format($date, "Y-m-d"); 
+0

Należy również zauważyć, że date_create_from_format jest aliasem dla DateTime :: createFromFormat, a żadne z nich nie są dostępne w PHP <5.3. –

2
// Formatted Date (YDDD) 
$dateGiven = "3212"; 

// Generate the year based on the first digit 
$year = substr(date("Y"),0,3).substr($dateGiven,0,1); 

// Split out the day of the year 
$dayOfTheYear = substr($dateGiven,1,3); 

// Create a date object from the formatted date 
$date = DateTime::createFromFormat('z Y', "{$dayOfTheYear} {$year}"); 

// Output the date in the desired format 
echo $date->format('Y-m-d'); 

View it online here: https://eval.in/private/69daafa849ee36

Powiązane problemy