php函数将“04-05-2012”转换为“04/05/2012?

时间:2012-03-27 18:33:30

标签: php date

我已尝试使用date("m/d/Y", strtotime("04-05-2012")),但我会得到"05/04/2012"或其他日期,例如"03-30-2012"我会得到"12/31/1969"(这有意义,因为它混淆了月和日没有30个月。所以我该怎么办呢?我还想把这个值转换成UNIX时间,以便我可以针对MySQL db进行搜索。

4 个答案:

答案 0 :(得分:8)

您可以使用DateTime对象和createFromFormat静态方法来执行此操作:

$date = DateTime::createFromFormat('m-d-Y',"03-30-2012");
$date->format('m/d/Y');

答案 1 :(得分:6)

如果你确定你开始使用的格式是DD-MM-YYY,为何不使用简单的替换?

e.g。 $newDate = str_replace('-', '/', '04-05-2012');

答案 2 :(得分:1)

一种方法是使用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()是您最好的选择,正如其他人指出的那样。

答案 3 :(得分:0)

这不是一个日期格式问题,而是一个字符串操作问题。

但是,知道 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()