php 将date转换成string,在PHP中将一种date格式转换成另一种格式

date()的第二个参数需要是一个适当的时间戳(1970年1月1日以来的秒数)。 您正在传递一个string,该date()无法识别。

您可以使用strtotime()将datestring转换为时间戳。 但是,即使strtotime()也不能识别ymdhis格式。

PHP 5.3及以上

使用DateTime::createFromFormat 。 它允许你指定一个确切的掩码 – 使用date()语法 – 来parsing传入的stringdate。

PHP 5.2和更低

您将不得不手动使用substr()分析元素(年,月,日,小时,分钟,秒substr() ,并将结果交给mktime() ,这会为您创build一个时间戳。

但是这是很多工作! 我build议使用strftime()可以理解的不同格式。 strftime()理解任何dateinput短the next time joe will slip on the ice 。 例如,这工作:

$old_date = date('l, F dyh:i:s'); // returns Saturday, January 30 10 02:06:34 $old_date_timestamp = strtotime($old_date); $new_date = date('Ymd H:i:s', $old_date_timestamp);

最简单的方法是

$myDateTime = DateTime::createFromFormat('Ym-d', $dateString); $newDateString = $myDateTime->format('m/d/Y');

你首先给它的格式是$ dateString。然后你告诉它你想要$ newDateString的格式。

这也避免了使用时间,这可能有时难以工作。

如果您不是从一种date格式转换为另一种date格式,而只是希望使用特定格式的当前date(或date时间),那么更容易:

$now = new DateTime(); $timestring = $now->format('Ymd h:i:s');

这个其他的问题也是指同一个主题: 转换date格式yyyy-mm-dd => dd-mm-yyyy 。

基础

将一种date格式转换成另一种date格式的简单方法是在date()使用strtotime() date() 。 strtotime()会将date转换为Unix时间戳 。 那Unix时间戳然后可以被传递给date()把它转换成新的格式。

$timestamp = strtotime('2008-07-01T22:35:17.02'); $new_date_format = date('Ymd H:i:s', $timestamp);

或者作为一个单线:

$new_date_format = date('Ymd H:i:s', strtotime('2008-07-01T22:35:17.02'));

请记住, strtotime()要求date的格式是有效的 。 未能提供有效的格式将导致strtotime()返回false,这将导致您的date为1969-12-31。

使用DateTime()

从PHP 5.2开始,PHP提供了DateTime()类,它为我们处理date(和时间)提供了更强大的工具。 我们可以使用DateTime()来重写上面的代码,如下所示:

$date = new DateTime('2008-07-01T22:35:17.02'); $new_date_format = $date->format('Ymd H:i:s');

使用Unix时间戳

date()以Unix时间戳作为第二个参数,并为您返回一个格式化的date:

$new_date_format = date('Ymd H:i:s', '1234567890');

DateTime()通过在时间戳之前添加@处理Unix时间戳:

$date = new DateTime('@1234567890'); $new_date_format = $date->format('Ymd H:i:s');

如果您拥有的时间戳以毫秒为单位(可能以000结尾和/或时​​间戳长度为十三个字符),则需要将其转换为秒后才能将其转换为其他格式。 有两种方法可以做到这一点:

使用substr()修剪最后三位数字

修剪最后三位数字可以通过几种方法实现,但使用substr()是最简单的:

$timestamp = substr('1234567899000', -3);

将substr除以1000

您也可以将时间戳转换为秒,除以1000.由于时间戳对32位系统来说过于庞大,因此您需要使用BCMath库以stringforms进行计算:

$timestamp = bcdiv('1234567899000', '1000');

要得到一个Unix时间戳,你可以使用返回一个Unix时间戳的strtotime() :

$timestamp = strtotime('1973-04-18');

有了DateTime(),你可以使用DateTime::getTimestamp()

$date = new DateTime('2008-07-01T22:35:17.02'); $timestamp = $date->getTimestamp();

如果您正在运行PHP 5.2,则可以使用U格式选项:

$date = new DateTime('2008-07-01T22:35:17.02'); $timestamp = $date->format('U');

使用非标准和不明确的date格式

不幸的是,并非所有开发人员必须使用的date都是标准格式。 幸运的是PHP 5.3为我们提供了一个解决scheme。 DateTime::createFromFormat()允许我们告诉PHPdatestring是什么格式,所以它可以被成功parsing成DateTime对象进一步操作。

$date = DateTime::createFromFormat('FdY h:i A', 'April-18-1973 9:48 AM'); $new_date_format = $date->format('Ymd H:i:s');

在PHP 5.4中,我们获得了对实例化进行类成员访问的能力,这使得我们可以将DateTime()代码转换为一行代码:

$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Ymd H:i:s'); $new_date_format = DateTime::createFromFormat('FdY h:i A', 'April-18-1973 9:48 AM')->format('Ymd H:i:s');

尝试这个:

$old_date = date('ymdhi-s'); $new_date = date('Ymd H:i:s', strtotime($old_date));

要将$date从dd-mm-yyyy hh:mm:ss转换为适当的MySQLdate时间,我可以这样做:

$date = DateTime::createFromFormat('dmY H:i:s',$date)->format('Ymd H:i:s');

$old_date = date('ymdhi-s'); // works

你在这里做错了,这应该是

$old_date = date('ymd h:i:s'); // works

时间分隔符是':'

我认为这将有助于…

$old_date = date('ymdhi-s'); // works preg_match_all('/(\d+)-(\d+)-(\d+)-(\d+)-(\d+)-(\d+)/', $old_date, $out, PREG_SET_ORDER); $out = $out[0]; $time = mktime($out[4], $out[5], $out[6], $out[2], $out[3], $out[1]); $new_date = date('Ymd H:i:s', $time);

要么

$old_date = date('ymdhi-s'); // works $out = explode('-', $old_date); $time = mktime($out[3], $out[4], $out[5], $out[1], $out[2], $out[0]); $new_date = date('Ymd H:i:s', $time);

以下是将date转换为不同格式的简单方法。

// Create a new DateTime object $date = DateTime::createFromFormat('Ym-d', '2016-03-25'); // Output the date in a different format echo $date->format('Ym-d');

strtotime将解决这个问题。 date是不一样的,都在我们的格式。

您需要将$ old_date转换回时间戳,因为date函数需要时间戳作为其第二个参数。

尝试这个:

$tempDate = explode('-','03-23-15'); $date = '20'.$tempDate[2].'-'.$tempDate[0].'-'.$tempDate[1];

这是您可以转换date格式的另一种方式

<?php $pastDate = "Tuesday 11th October, 2016"; $pastDate = str_replace(",","",$pastDate); $date = new DateTime($pastDate); $new_date_format = $date->format('Ym-d'); echo $new_date_format.' 23:59:59'; ?>

只是使用string,对我来说是一个很好的解决scheme,减less了与MySQL的问题。 检测当前格式并在必要时进行更改,此解决scheme仅适用于西class牙文/法文格式和英文格式,而不使用phpdate时间function。

class dateTranslator { public static function translate($date, $lang) { $divider = ''; if (empty($date)){ return null; } if (strpos($date, '-') !== false) { $divider = '-'; } else if (strpos($date, '/') !== false) { $divider = '/'; } //spanish format DD/MM/YYYY hh:mm if (strcmp($lang, 'es') == 0) { $type = explode($divider, $date)[0]; if (strlen($type) == 4) { $date = self::reverseDate($date,$divider); } if (strcmp($divider, '-') == 0) { $date = str_replace("-", "/", $date); } //english format YYYY-MM-DD hh:mm } else { $type = explode($divider, $date)[0]; if (strlen($type) == 2) { $date = self::reverseDate($date,$divider); } if (strcmp($divider, '/') == 0) { $date = str_replace("/", "-", $date); } } return $date; } public static function reverseDate($date) { $date2 = explode(' ', $date); if (count($date2) == 2) { $date = implode("-", array_reverse(preg_split("/\D/", $date2[0]))) . ' ' . $date2[1]; } else { $date = implode("-", array_reverse(preg_split("/\D/", $date))); } return $date; }

使用

dateTranslator::translate($date, 'en')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值