2012-04-24 140 views

回答

154

日期是由在各种组件之间的分隔符寻找 消除歧义:如果分离器是 斜线(/),则美国m/d/y假设;而如果 分隔符是短划线(-)或点(.),则假定欧洲d-m-y 格式。检查more here

使用默认日期功能。

$var = "20/04/2012"; 
echo date("Y-m-d", strtotime($var)); 

编辑我只是测试它,不知何故,PHP不能很好地使用dd/mm/yyyy格式工作。这是另一种解决方案。

$var = '20/04/2012'; 
$date = str_replace('/', '-', $var); 
echo date('Y-m-d', strtotime($date)); 
+1

这里只得到1970-01-01如果我使用的是dd/mm/yyyy格式。 mm/dd/yyyy格式适用于此代码。 – 2013-04-24 05:03:06

+20

@SibirajPR ** m/d/y或d-m-y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线(/),则假定美国m/d/y;而如果分隔符是破折号( - )或点(。),则假定欧洲的dmy格式。**在此查看更多信息:http://www.php.net/manual/en/function.strtotime.php – hjpotter92 2013-04-24 06:01:17

+0

感谢您提供宝贵的信息。 – 2013-04-24 09:57:43

3

这样做:

date('Y-m-d', strtotime('dd/mm/yyyy')); 

但要确保 'DD/MM/YYYY' 是实际日期。

+0

谢谢,这工作得很好!! – 2012-04-24 22:48:53

+1

这是有问题的,因为strtotime会用'/'分隔符作为美国人读取日期,即'm/d/Y',而''为欧洲'dmY'。请参阅接受的答案的编辑和php文档:http://php.net/manual/en/function.strtotime.php - 注意: 日期m/d/y或dmy格式通过外观来消除歧义在不同部件之间的分离器上:如果分离器是斜线(/),则假定美国m/d/y;而如果分隔符是破折号( - )或点(。),则假定欧洲的d-m-y格式。 – haakym 2015-04-20 13:52:45

20

这里是不使用日期另一种解决方案()。没有那么聪明:)

$var = '20/04/2012'; 
echo implode("-", array_reverse(explode("/", $var))); 
+5

如果它不聪明,它为什么这么聪明。我根本看不出这个解决方案有什么问题,并且节省了日期和地点的麻烦。每次保证性能。 – 2013-12-18 05:21:28

+0

@tosin非常有创意的解决方案! – 2016-03-16 14:22:44

+0

只有当他们像05/04/2010那样添加0时,它才会起作用,如果他们写的是5/4/2010,它将不起作用。 – Shadowbob 2016-10-18 16:02:53

2

我要指出,编程使用时间戳比实际日期来表示时间时,它会更好,那么你可以使用PHP的“时间戳”值转换为任何格式你想要的日期。

+2

@VitorTyburski你不能认真吗?任何具有正确思维的专业程序员都知道,将日期存储为时间戳是处理日期格式和添加或删除时间片的最佳方法,因为它只需将时间戳值的数量加上或减去几秒钟。 – 2014-07-08 18:07:55

+0

我通过了一些研究,看到你的观点。你是对的。虽然你没有回答这个问题。 – 2014-07-08 19:55:59

+0

@VitorTyburski你为什么删除你的第一个评论呢?它只是表明你太依赖“删除”功能来隐藏你的错误。我没有回答这个问题,因为当我在线程中时,最好的答案已经在那里了,所以我只想指出,使用时间戳值是一个好习惯。 – 2014-07-10 05:32:12