有没有人知道是否已经有办法将日期格式化为一定的精度,而我没有写一些东西来重建给定的格式?
例如,假设我有任何格式的日期,但我想将其转换为Y-m-d H:i:s格式,使用PHP DateTimeFormat(参见下面的PHP网站示例)
$date = new DateTime('2000-01-01');
echo $date->format('Y-m-d H:i:s');
Result: 2000-01-01 00:00:00
我真正希望它做的不是返回H:i:s的一部分,如果它从未包含在原始日期中。
目前,我能想到的唯一方法是使用 date_parse_from_format ,找出遗漏的内容,然后对日期格式'Ymd H:i:s'进行某种字符串处理省略我不需要的部分(杂乱的字符串格式,因为这种日期格式可能是任何东西)。
如果我已经错过了一个功能,我只是不想重新发明轮子。
Ta,Jo
编辑:为了更清楚,日期格式字符串和$ date的精度是可变的,所以我不能硬编码格式字符串,我不知道$ date的精度,直到我得到它答案 0 :(得分:0)
preg_match是您正在寻找的,具体来说:
if(preg_match('/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/',$date)){
//here do the conversion for "Y-m-d H:i:s"
}else{
//here do the conversion for "Y-m-d"
}
答案 1 :(得分:0)
我想你必须知道你的日期是什么格式。
<?php
echo 'Current time: ' . date('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d';
$date = DateTime::createFromFormat($format, '2009-02-15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = 'Y-m-!d H:i:s';
$date = DateTime::createFromFormat($format, '2009-02-15 15:16:17');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
$format = '!d';
$date = DateTime::createFromFormat($format, '15');
echo "Format: $format; " . $date->format('Y-m-d H:i:s') . "\n";
?>
答案 2 :(得分:0)
使用strtotime将几乎任何日期格式转换为时间戳。从那里,您可以使用date()来设置您想要的格式。
欲了解更多信息:
http://php.net/manual/en/function.strtotime.php
http://www.php.net/manual/en/function.date.php
编辑: date_parse也可能达到你想要的效果:
答案 3 :(得分:0)
我不认为这是最有效的方法,但似乎有效。它可以调整,以允许不同的精度水平。 (我选择了Y-m-d H:i:s
,Y-m-d H:i
和Y-m-d
。我认为Y-m-d H
不会有帮助,但也许您可能会Y-m-d ha
。如果是这样,添加它会很容易。)
<?php
// Output dates at arbitrary precision.
header ('Content-Type: text/plain');
$input = isset($_GET['date']) ? $_GET['date'] : date('Y-m-d');
$date = new DateTime($input);
echo format_date($date);
function format_date($date) {
switch ($date->format('s')) {
case '00':
switch ($date->format('H')) {
case '00':
return $date->format('Y-m-d');
default:
return $date->format('Y-m-d H:i');
}
default:
return $date->format('Y-m-d H:i:s');
}
}
当然,这并不允许这个人真正想要一个恰好午夜的时间,并且明确地这么说。我不知道你覆盖这个案子有多重要。
答案 4 :(得分:0)
这是将时间和日期保存为unix时间戳而不是其他格式的最佳方式。
我已经创建了一个类来处理php中的日期和时间。它易于使用且非常有用
在您的情况下,您可以使用提供的setter设置年,月,日,小时,分钟和秒,而不是扩展公共功能以获取预期格式的日期和时间。
include_once("scTimestamp.php");
$test=new scTimestamp();
echo $test->getDateAsString();
$test->setTimestamp(1210203200);
echo $test->getDateDifferenceFromNow();
echo $test;
$test->setTimestamp(121020320022);
echo $test->getYear();
echo $test;
一旦包含它,可以按照以下方式使用
{{1}}
结果就是这样。
2015年6月26日,2008年5月7日,晚上11:33 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^ @@时间戳:1210203200 @@ @@日期:2008年5月7日,晚上11:33 @@ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 5804 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@时间戳:121020320022 @@ @@日期:12月25日,5804,凌晨3:33 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
此类可根据需要使用