如何在PHP中将日期转换为时间戳?
如何在PHP中将日期转换为时间戳?
问题的出现原因:
- 如果使用不支持的格式,则无法使用DateTime API将日期转换为时间戳。
解决方法:
1. 使用DateTime API:
$dateTime = new DateTime('2008-09-22'); echo $dateTime->format('U'); // 或者 $date = new DateTime('2008-09-22'); echo $date->getTimestamp();
2. 使用过程式API:
$date = date_create('2008-09-22'); echo date_format($date, 'U'); // 或者 $date = date_create('2008-09-22'); echo date_timestamp_get($date);
3. 如果以上方法因使用不支持的格式而失败,可以使用以下方法:
$date = DateTime::createFromFormat('!d-m-Y', '22-09-2008'); echo $dateTime->format('U'); // 或者 $date = date_parse_from_format('!d-m-Y', '22-09-2008'); echo date_format($date, 'U');
4. 另一种选择是使用IntlDateFormatter API:
$formatter = new IntlDateFormatter( 'en_US', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'GMT', IntlDateFormatter::GREGORIAN, 'dd-MM-yyyy' ); echo $formatter->parse('22-09-2008');
请注意,如果不设置`!`,时间部分将设置为当前时间,这与前四种方法不同,它们在省略时间时将使用午夜。
除非您使用本地化的日期字符串,否则更容易选择DateTime。
我现在推荐使用DateTime而不是我的答案。
不要忘记`!`!我的基于日期的时间戳在每次刷新时都在改变,这让我发疯 - 因为DateTime在没有询问或被告知的情况下,会自动添加当前时间。真让人恼火。
我想补充的是,我建议不要使用含糊不清的日期解析,并且在解析日期字符串时应明确给出日期格式。
问题:如何在PHP中将日期转换为时间戳?
原因:上述问题的出现可能有以下原因:
1. 用户想要将特定格式的日期转换为时间戳。
2. 用户使用的PHP版本可能不支持或者不推荐使用strptime函数。
3. 用户可能使用的是Windows平台,而strptime函数在Windows上不可用。
解决方法:
1. 使用strptime函数:
$a = strptime('22-09-2008', '%d-%m-%Y'); $timestamp = mktime(0, 0, 0, $a['tm_mon']+1, $a['tm_mday'], $a['tm_year']+1900);
但需要注意的是,strptime函数在Windows平台上不可用,并且在PHP 8.1.0版本中已被弃用,不建议使用。
2. 使用date_parse_from_format函数:
$date = '22-09-2008'; $format = 'd-m-Y'; $result = date_parse_from_format($format, $date); $timestamp = mktime(0, 0, 0, $result['month'], $result['day'], $result['year']);
对于使用Windows平台和PHP 5.3.0以上版本的用户,可以考虑使用date_parse_from_format函数替代strptime函数。
本文介绍了如何在PHP中将日期转换为时间戳。根据用户的需求和使用环境,可以选择使用strptime函数或date_parse_from_format函数来实现。然而,需要注意的是,strptime函数在Windows平台上不可用,并且在PHP 8.1.0版本中已被弃用。因此,对于Windows平台上的用户,建议使用date_parse_from_format函数来替代strptime函数。
如何在PHP中将日期转换为时间戳?
问题的原因:需要将日期转换为时间戳,以便在代码中进行操作或存储。
解决方法:
1. 如果不关心时区,或者想要使用服务器所在时区:
$d = DateTime::createFromFormat('d-m-Y H:i:s', '22-09-2008 00:00:00'); if ($d === false) { die("Incorrect date string"); } else { echo $d->getTimestamp(); }
输出:1222093324(这将根据服务器时区而有所不同)
2. 如果想要指定特定的时区,比如EST(与纽约相同):
$d = DateTime::createFromFormat( 'd-m-Y H:i:s', '22-09-2008 00:00:00', new DateTimeZone('EST') ); if ($d === false) { die("Incorrect date string"); } else { echo $d->getTimestamp(); }
输出:1222093305
3. 如果想要使用UTC(协调世界时,与格林威治标准时间相同):
$d = DateTime::createFromFormat( 'd-m-Y H:i:s', '22-09-2008 00:00:00', new DateTimeZone('UTC') ); if ($d === false) { die("Incorrect date string"); } else { echo $d->getTimestamp(); }
输出:1222093289
总之,在将字符串解析为结构化数据时,严格规定日期格式是一个好的起点。这可以避免未来的尴尬调试。因此,建议始终指定日期格式。
对于使用PHP 5.3+的用户,可以采用Prof. Falken的回答,这种方法可以完全控制日期格式。
但是,要注意`strtotime('2012')`可能会导致时间戳是今天的日期,时间为20:12。
这个解决方案可能会导致意外行为。那些使用PHP 5.3+的用户应该采用Prof. Falken的回答,这样可以完全控制日期格式。
看来,Prof.Falken为了看到自己回答的许多赞,更新了回答并加入了自己的见解。