Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中日期格式之间的转换_Php_Date_Format_Date Formatting - Fatal编程技术网

PHP中日期格式之间的转换

PHP中日期格式之间的转换,php,date,format,date-formatting,Php,Date,Format,Date Formatting,我有一个需要用户输入日期的Web,然后将其存储在MySQL数据库中。我希望用户以m/d/yyyy格式输入日期,并让系统将其转换为MySQL所需的Y-m-d格式。我认为这很简单,但我不能让它停止犯严重错误 我尝试了以下方法: $date = new DateTime($this->vital_date); $this->vital_date = $date->format('Y-m-d'); 当用户输入9/6/2013时,2013-06-09存储在MySQL表中。(注意月份和日

我有一个需要用户输入日期的Web,然后将其存储在MySQL数据库中。我希望用户以m/d/yyyy格式输入日期,并让系统将其转换为MySQL所需的Y-m-d格式。我认为这很简单,但我不能让它停止犯严重错误

我尝试了以下方法:

$date = new DateTime($this->vital_date);
$this->vital_date = $date->format('Y-m-d');
当用户输入9/6/2013时,2013-06-09存储在MySQL表中。(注意月份和日期的转换

然后,我尝试了更古老的预对象方式:

$date = strtotime($this->vital_date);
$this->vital_date = date('Y-m-d', $date);
这也做了同样的事情——一个月和日期的转换

有谁能帮我找出我做错了什么,或者如何更好地进行转换。

您应该使用非标准格式

您应该使用非标准格式

您应该使用

来自PHP文档

通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中的日期歧义:如果分隔符是斜杠(/),则假定为美国m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式

为了避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime::createFromFormat()

示例

$vital_date = "9/6/2013";
$date = DateTime::createFromFormat("m/d/Y", $vital_date);
echo $date->format('Y-m-d');
你应该使用

来自PHP文档

通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式中的日期歧义:如果分隔符是斜杠(/),则假定为美国m/d/y;而如果分隔符是破折号(-)或点(.),则假定为欧洲d-m-y格式

为了避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime::createFromFormat()

示例

$vital_date = "9/6/2013";
$date = DateTime::createFromFormat("m/d/Y", $vital_date);
echo $date->format('Y-m-d');

您可以通过以下方式指定提供数据的格式:

$date = DateTime::createFromFormat('j/n/Y', '9/6/2013');

您可以通过以下方式指定提供数据的格式:

$date = DateTime::createFromFormat('j/n/Y', '9/6/2013');

此示例不仅适用于这种情况,而且在许多其他地方也很有用,例如从数学家那里获取信息,在您的站点文本框中输入二次方程,而不使用正则表达式

或者可以正确处理驾驶执照号码并将其存储在数据库中,使用
scanf
对其进行格式化,例如
scanf($input,'%s-%s-%d/%d)
;等等

这取决于您的需要,因此您必须了解
sscanf
scanf
printf
sprintf
vsprintf

<?php 
$date = '9/6/2013';

    list($month,$day,$year) = sscanf($date, '%d/%d/%d');

    $date = sprintf('%d-%02d-%02d',$year,$month,$day);

echo $date;
?>

此示例不仅适用于这种情况,而且在许多其他地方也很有用,例如从数学家那里获取信息,在您的站点文本框中输入二次方程,而不使用正则表达式

或者可以正确处理驾驶执照号码并将其存储在数据库中,使用
scanf
对其进行格式化,例如
scanf($input,'%s-%s-%d/%d)
;等等

这取决于您的需要,因此您必须了解
sscanf
scanf
printf
sprintf
vsprintf

<?php 
$date = '9/6/2013';

    list($month,$day,$year) = sscanf($date, '%d/%d/%d');

    $date = sprintf('%d-%02d-%02d',$year,$month,$day);

echo $date;
?>


不要使用直接的日期时间,而是使用静态方法,指定日期字符串的格式可能一切正常,但mysql使用错误(欧洲)格式?您是否尝试保存日期并再次检索它?不要使用直接的日期时间,而是使用静态方法指定日期字符串的格式。也许一切都很好,但您的mysql使用了错误的(欧洲)格式?您是否尝试保存日期并再次检索它?您应该使用
n
表示月份,使用
j
表示日期。否则,格式中应使用前导零。在您的评估中看不到任何问题。您需要交换
j
n
,因此格式将相等:)@Baba我对此有一个严格的规则:
如果(in_数组($drink,$alcohold))出口()
实际上,我似乎已经解决了这个问题,解决方案比想象的要简单得多。我在使用JQuery UI DatePicker时,没有注意到它是以2013年6月9日而不是2013年6月9日的格式输出日期,因此,您建议的消除歧义是问题的核心。当我将其更正为使用sl时灰烬而不是破折号,我发现以下操作非常有效:
$this->vital\u date=date(“Y-m-d”,strotime($this->vital\u date));
--简单的一行代码。非常感谢,你真的让我思考了这一行的所有方面。你应该使用
n
表示月份,使用
j
表示日期。否则格式中会出现前导零。在你的评估中看不到任何问题。你需要交换
j
n
,因此格式将是相等的:)@爸爸,我对此有一个严格的规则:
if(in_数组($drink,$alcohold))exit()$this->vital_date=date(“Y-m-d”,strotime($this->vital_date))--一个简单的单行程序。非常感谢,你真的让我思考了这个问题的方方面面。