0

我正在使用jQuery datepicker,显然日期格式与 php 格式不匹配。

如何将 datepicker 格式转换为 php 格式,以便我可以date( $format )以 datepicker 格式中定义的相同约定输出。所以说我把格式像dd/mm/yyyy,我怎么能把它转换成m/d/ophp?或者,如果我将其指定为d-m-yy,如何将其转换为n-j-y

基本上,想知道如何转换允许的日期选择器格式,而不管字母或分隔符是什么到 php.ini 文件。

我试过使用 preg_replace,但问题在于单个和两个相同的字母。dd变成nn,因为它试图替换d两次。可以使用正则表达式的东西吗?我对如何完成转换的逻辑有点迷茫。

编辑:对于细节上的疏忽,我深表歉意。js 格式字面意思是dd/mm/yyyy,而不是实际的日期输出。它是什么,在 CMS 中,用户定义日期选择器使用的格式(dd/mm/yyyy 或日期选择器具有的任何其他格式序列和分隔符)。PHP 用于使用定义的格式和顺序输出当前日期。我想让他们定义一种 PHP 格式,然后将其转换为 js 格式。但是,那些总是以他们想要的方式想要事物的权力——叹息)。

Edit#2 这是 Codepad 上的一个工作脚本,它显示了格式中的字母被单独处理和加倍处理的问题。mm变成nn而不是仅仅存在m。其余的角色也被个性化了。

http://codepad.org/lBgqVgbs

4

3 回答 3

1

这就是如何处理它:

$date = '13/06/2013';
$date = implode("-",array_reverse(explode("/",$date)));
$time = strtotime($date);

echo date("m-d-Y H:i:s",$time); // or however you want to format
  1. 爆炸日期/
  2. 反转数组的顺序以获得正确的strtotime()格式
  3. strtotime()为我们的弦内爆碎片
于 2013-06-13T21:03:38.660 回答
1

您可能想要使用DateTime::createFromFormat,它可以让您定义字符串的格式。然后,使用该对象的 format() 函数以您想要的方式输出日期。

例如:

date_default_timezone_set('Europe/Berlin'); // or any other timezone - you must set a timezone though
$date = DateTime::createFromFormat('d/m/Y', '20/05/1996');
$formatted_date = $date->format('Y-m-d');
var_dump($formatted_date); // output: string(10) "1996-05-20"

您可以使用几乎所有与常规 date() 函数相同的格式字母,但如果您需要额外的字母 - 例如 'o',您可以使用格式化日期:$yet_another_date = date('m/d/o', strtotime($formatted_date));

于 2013-06-13T21:04:14.490 回答
1

实际上比我想象的要容易。我不知道你可以使用#var#i。因此将其混合到两个数组中并使用 preg_replace ...

$pattern = array( '#mm#i', '#m#i', '#dd#i', '#d#i', '#yyyy#i', '#yy#i' );
$replacement = array( 'm', 'n', 'd', 'j', 'o', 'y' );

$date_format = preg_replace( $pattern, $replacement, $option_format );

非常感谢那些为我的问题提供答案的人。我很抱歉。

于 2013-06-14T02:50:43.470 回答