这就是我所拥有的:
$dateFormat = 'M d, Y';
$dateString = 'January 23, 2010';我需要的是$dateString的时间戳,这样我就可以这样做:
$newFormattedDate = date('Y-m-d', $timestamp);我尝试使用strtotime函数,但它试图找出格式本身,并且并不总是有效。在我的情况下,我知道日期字符串和日期格式。
如何将$timestamp设置为与date函数一起使用的相应值?
编辑:我需要它在Linux和Windows环境中工作。
编辑:解决方案必须支持PHP版本4或更高版本
编辑: MySQL有一个名为STR_TO_DATE的函数,它接受日期字符串和日期格式,并返回Y-m-d格式的日期字符串。php的任何等效函数也适用于我。
发布于 2010-02-25 17:26:49
从PHP5.3开始,您可以使用DateTime API
$dt = date_create_from_format('M d, Y', 'January 23, 2010');
echo date_timestamp_get($dt);或使用OOP表示法
$dt = DateTime::createFromFormat('M d, Y', 'January 23, 2010');
echo $dt->getTimestamp();请注意,虽然DateTime在PHP5.3中可用,但上面使用的方法不可用,虽然您可以用->format('U')模拟->getTimestamp(),但createFromFormat()没有简单的解决方法
另一种选择是使用Zend Framework中的Zend_Date:
$date = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
echo $date->get(Zend_Date::TIMESTAMP);发布于 2010-02-25 17:00:42
使用strptime、mktime和strftime
$ftime = strptime($dateString, $dateFormat);
$timestamp = mktime($ftime['tm_hour'], $ftime['tm_min'], $ftime['tm_sec'], 1,
$ftime['tm_yday'] + 1, $ftime['tm_year'] + 1900);
echo strftime('Y-m-d', $timestamp);请注意,strptime并未在Windows平台上实现。
注意,mktime的参数有些不寻常-- strptime返回一年中的某一天(在0-365之间,包括0-365),而不是一年中的某一天和一个月,所以我们将mktime参数设置为1,并在一年中的某一天加上1。此外,对于返回的年份值,strptime返回自1900年以来的年份,因此在将其传递给mktime之前,我们需要在年份的基础上加上1900。
此外,在将$ftime传递到mktime之前,您可能需要检查它是否为FALSE。返回FALSE的strptime表示根据$dateFormat,输入的$dateString不是有效的日期格式。
发布于 2010-02-25 21:05:43
根据我对这个问题的理解以及PHP中提供了什么,您需要在某处放松您的期望。
一个“简单”的解决方案(已经打折了)是强制使用PHP 5.3和其中提供的工具。
一种不太简单的解决方案是将这些新增内容移植到PHP-land (具有PHP 4兼容性,祝您好运)。
另一种探索途径是考虑strtotime对您不起作用的情况,并解决这些限制。
您的格式字符串的变化范围有多大?有可能提出一种解决方案,将格式字符串映射到函数/方法(进行日期解析),前提是它们受到很大的限制。
https://stackoverflow.com/questions/2332740
复制相似问题