这就是我所拥有的:
$dateFormat = 'M d, Y';
$dateString = 'January 23, 2010';
我需要的是$dateString
的时间戳,所以我可以这样做:
$newFormattedDate = date('Y-m-d', $timestamp);
我尝试使用strtotime
函数,但它试图找出格式本身并且不能始终有效。在我的情况下,我知道日期字符串和日期格式。
如何将$timestamp
设置为适当的值以用于date
功能?
编辑:解决方案必须支持PHP 4或更高版本
编辑:MySQL有一个名为STR_TO_DATE
的函数,它接受日期字符串和日期格式并返回Y-m-d
格式的日期字符串。 php的任何等效函数也适用于我。
答案 0 :(得分:7)
从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
虽然可用于PHP< 5.3,上面使用的方法不是,虽然您可以使用->getTimestamp()
模拟->format('U')
,但createFromFormat()
没有简单的解决方法
另一种方法是使用Zend Framework中的Zend_Date
:
$date = new Zend_Date('Feb 31, 2007', 'MM.dd.yyyy');
echo $date->get(Zend_Date::TIMESTAMP);
答案 1 :(得分:3)
$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之间),而不是一个月中的某一天,所以我们设置将mktime
的月份参数设置为1,并将1添加到一年中的某一天。此外,strptime
返回自1900年以来的年份返回的年份值,因此我们需要在将年份增加1900之前将其传递给mktime
。
此外,您可能需要在将$ftime
传递给FALSE
之前检查mktime
是否为strptime
。 FALSE
返回$dateString
表示根据$dateFormat
,输入{{1}}不是有效的日期格式。
答案 2 :(得分:2)
鉴于我对这个问题的理解以及PHP中的可用内容,您需要在某处或其他地方放松您的期望。
一个“简单”的解决方案(已经打折)将强制使用PHP 5.3及其中提供的工具。
一个不太简单的解决方案是将这些添加内容移植到PHP-land(兼容PHP 4,祝你好运)。
另一种探索途径是考虑strtotime
不适合你并解决这些限制的场合。
您的格式字符串的变体有多广泛?有可能提出一种解决方案,将格式字符串映射到函数/方法(进行日期解析),前提是它们非常受限制。
答案 3 :(得分:0)
$dateFormat = 'M d, Y'
$timestamp = strtotime($dateString);
echo date($dateFormat, $timestamp);
如果我没有误解你的问题,你可以尝试上面的代码..