如何在PHP中将日期转换为时间戳?

22 浏览
0 Comments

如何在PHP中将日期转换为时间戳?

如何从22-09-2008这样的日期获取时间戳?

0
0 Comments

如何在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在没有询问或被告知的情况下,会自动添加当前时间。真让人恼火。

我想补充的是,我建议不要使用含糊不清的日期解析,并且在解析日期字符串时应明确给出日期格式。

0
0 Comments

问题:如何在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函数。

0
0 Comments

如何在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为了看到自己回答的许多赞,更新了回答并加入了自己的见解。

0