Функция PHP для преобразования "04-05-2012" в "04/05/2012? - PullRequest
1 голос
/ 27 марта 2012

Я пытался использовать date("m/d/Y", strtotime("04-05-2012")), но я получу "05/04/2012" или в некоторые другие даты, например "03-30-2012" Я получу "12/31/1969" (что имеет смысл, потому что это смешивает месяц и день, и нет 30-й месяц. Так как мне это сделать? Я также хочу затем преобразовать значение в UNIX-время, чтобы я мог искать его по базе данных MySQL.

Ответы [ 4 ]

8 голосов
/ 27 марта 2012

Вы можете использовать объект DateTime и статический метод createFromFormat, чтобы сделать это:

$date = DateTime::createFromFormat('m-d-Y',"03-30-2012");
$date->format('m/d/Y');
6 голосов
/ 27 марта 2012

Если вы точно знаете, что начинаете с формата DD-MM-YYY, почему бы не использовать простую замену?

например, $newDate = str_replace('-', '/', '04-05-2012');

1 голос
/ 28 марта 2012

Один из способов сделать это - использовать explode() и mktime():

$inDate = '03-30-2012';
list($m, $d, $y) = explode('-', $inDate);
$outDate = date('m/d/Y', mktime(0, 0, 0, $m, $d, $y));

Это предполагает, что формат каким-то образом динамический. В противном случае, как указывали другие, str_replace() - ваш лучший вариант.

0 голосов
/ 28 марта 2012

Это не столько вопрос формата даты, сколько вопрос манипуляции со строками.

Но все же приятно знать, что strtotime() существует.

[ghoti@pc ~]$ cat transdate.php 
#!/usr/local/bin/php
<?php

$olddate = "04-05-2012"; // assuming mm-dd-YYYY

// Get the date parts into an array
$parts = explode("-", $olddate);
// Switch to YYYY-mm-dd, which will be interpreted consistently
$neworder = sprintf("%s-%s-%s", $parts[2], $parts[0], $parts[1]);

printf("New order: %s\n", $neworder);

// Set your timezone, or PHP will whine and complain
date_default_timezone_set('America/Toronto');
// Convert your reordered date to an epoch second (unix timestamp)
$epoch = strtotime($neworder);

// At a terminal, `man strftime` (or read the PHP function's docs) for details.
print "Alternate formats:\n";
printf("\t%s\n", strftime("%D", $epoch));
printf("\t%s\n", strftime("%F", $epoch));
printf("\t%s\n", strftime("%A %B %e, %Y (week %U)", $epoch));

[ghoti@pc ~]$ ./transdate.php 
New order: 2012-04-05
Alternate formats:
        04/05/12
        2012-04-05
        Thursday April  5, 2012 (week 14)
[ghoti@pc ~]$ 

Это будет работать в PHP 5.1.6. Черт возьми, он должен работать в PHP 4, за исключением date_default_timezone_set().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...