0

我正在尝试获取格式如下的日期字符串的 unix 时间:

'second sunday of march 2010'
'first sunday of november 2010'

我的印象是 strtotime 可以处理这样的字符串,但显然不能,因为它返回 false。当给定一周中的某一天时,我如何转换为 unix 时间,其中一个是一个月(即第一,第二等),一个月和一年。

4

2 回答 2

3

这应该是可能的strtotime。您可以尝试使用生成三月第一天的时间戳mktime()并将其添加为第二个参数(在字符串部分仅保留“第一个星期日”):

$timestamp = mktime (0,0,0,3,1,2010);  // 1st of march
$first_sunday = strtotime("first sunday", $timestamp);

不确定这将如何处理实际上是星期日的第一天(3 月 1 日)。确保你检查出来。

另外,也许这更可靠,请检查一下-张贴者说他使用以下符号(引用)得到了很好的结果:

<?php
strtotime('+0 week sun nov 2009'); // first sunday in nov 2009
strtotime('+1 week sun nov 2009'); // second sunday
strtotime('-1 week sun nov 2009'); // last sunday in oct 2009
?>

与 strtotime 一样,无论您选择什么,请确保您测试良好,尤其是边缘情况(每月的第一天是星期日,上个月的最后一天是星期日......)

于 2010-03-23T23:14:19.507 回答
0

您的代码适用于 PHP 5.3.0。您使用的是什么版本的 PHP?

<?php
date_default_timezone_set("Europe/Oslo");
$time_march = strtotime('second sunday of march 2010');
$time_november = strtotime('first sunday of november 2010');
echo date("Y-m-d", $time_march) . " (timestamp: $time_march)\n";
echo date("Y-m-d", $time_november) . " (timestamp: $time_november)\n";
?>

给出:

2010-03-14 (timestamp: 1268521200)
2010-11-07 (timestamp: 1289084400)
于 2010-03-23T23:21:35.700 回答