如何从setTimezone函数返回时间戳



我希望能够将当前UTC时间转换为用户的时区,并将该值作为时间戳。易于理解的

不过我似乎遇到了一些困难。。。这就是我尝试过的:

Carbon::now()->setTimezone('America/Los_Angeles'); // this works, but returns the time in the format "Y-m-d H:i:s"

所以我尝试了这个:

Carbon::now()->setTimezone('America/Los_Angeles')->timestamp; // for some reason doing this seems to revert the timezone conversion and instead returns the timestamp for the current UTC time? :/

所以,我使用这个变通方法:

$converted_time = Carbon::now()->setTimezone('America/Los_Angeles');
return Carbon::createFromFormat('Y-m-d H:i:s', $converted_time)->timestamp;

这给了我所需要的,但似乎没有必要。有更好的方法(在一行中(吗?

谢谢。

Unix时间戳根据定义是自1970年1月1日UTC以来的秒数。

如果你试图计算自其他日期以来的秒数(比如洛杉矶的1月1日(,你计算的是其他不是Unix时间戳的东西。

为了有意义,时间戳作为一个数字将是一秒钟的非模糊表示,这一点非常重要,它可以在全球范围内安全使用,并且仍然代表同一时刻。如果你有一个数字,它可能与你正在查看的时区不同,那么你可能没有使用正确的工具,并且存储日期时间+时区会更安全。

因此,第一个问题是,为什么你需要获得自1月1日以来在洛杉矶的秒数?

您可以在这里阅读更多关于如何正确使用UTC的信息,以及为什么要避免后端对其他时区的计算产生强烈依赖:

https://kylekatarnls.medium.com/always-use-utc-dates-and-times-8a8200ca3164

最新更新