使用特定时区和特定$now值从相对日期/时间字符串获取时间戳

3
我知道在PHP中有两种从相对日期/时间字符串获取时间戳的方法: strtotime:允许用户指定自己的 $now value DateTime对象:允许用户指定自己的 $timezone value 是否有一种方法可以从日期/时间字符串获取时间戳,允许同时指定时区和 $now value?似乎唯一的方法是使用 strtotime,同时临时覆盖整个PHP应用程序的默认时区,然后立即设置回来。这似乎是一个笨拙的解决方案,如果有更简洁的方法就好了。 编辑:似乎有一些误解关于我的尝试做什么。这里有一个更具体的例子: “我想找到与美国/洛杉矶时区内"下周二下午3点"字符串对应的时间戳,并指定一个任意值为 $now,例如2014年3月14日上午8:05。”

2
请参见此处的示例2:http://php.net/manual/zh/datetime.construct.php - vascowhite
2
在日期字符串中包含时区,例如RFC2822所示:Thu, 21 Dec 2000 16:01:07 +0200 - Mike B
http://php.net/manual/en/datetime.settimezone.php - Marc B
迄今为止,Mike B可能是最接近的,感谢他的建议。 - Matt Diamond
@MikeB 谢谢你的提示!这是最后的绝招。 - hek2mgl
1个回答

2
我准备了一个例子,这可能是你想要的:
<?php

// Including the timezone int the time strings (thanks @Mike B!!!) 
// will make it very easy.  just strtotime() is required

// create a timestamp for March 14th PDT
$now = strtotime('14 March 2014 8:05am America/Los_Angeles');

// get the requested timestamp.
$nexTuesday = strtotime('next tuesday 3:00 pm America/Los_Angeles', $now);

谢谢,但这不是我要找的。例如,如果当前时间是2014年3月14日上午9点,您如何计算出“下周二下午3点在柏林”的时间? - Matt Diamond
太接近了!一瞬间我以为它可能真的会起作用,但问题在于strtotime将使用默认时区,“下周二下午3:00”将根据您的默认时区而有不同的时间戳,而与当前UTC时间戳无关。我想能够明确设置该时区。 - Matt Diamond
我本来想说这不重要,但是在闰秒(夏令时)的情况下确实很重要。让我再想一会儿 :) - hek2mgl
你怎么能说这不重要呢?在纽约的“下周二下午3点”和在东京的“下周二下午3点”之间相差了14个小时!我认为这是一个非常重要的区别。 - Matt Diamond
我注意到你假设了夏令时(PDT 而不是 PST)……如果我们不知道下周二是否仍然是夏令时,这仍然有效吗?如果是“+3个月”而不是“下周二”呢?无论如何,这可能是最接近解决方案的东西……我可能会将“PDT”替换为“America/Los_Angeles”。 - Matt Diamond
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接