在php中获取带有秒和小数秒的ISO 8601日期?

9 浏览
0 Comments

在php中获取带有秒和小数秒的ISO 8601日期?

我也同意这样做:

php> echo date("Y-m-d\TH:i:s");
      2011-05-27T11:21:23

如何使用date函数获取这个日期格式:

2011-01-12T14:41:35.7042252+01:00 (例如)

35.7042252 => 秒.小数秒

我尝试过:

php> function getTimestamp()

... {

... return date("Y-m-d\TH:i:s") . substr((string)microtime(), 1, 8);

... }

php> echo getTimestamp();

2011-05-27T15:34:35.6688370 // 缺少+01:00 怎么办?

0
0 Comments

问题的出现原因是通过分别调用`date`和`microtime`函数获取时间戳时,有可能会出现两个时间戳顺序颠倒的情况。解决方法是使用以下代码替代原来的方法:

list($usec, $sec) = explode(" ", microtime());
echo date("Y-m-d\TH:i:s", $sec) . substr($usec, 1, 8) . date("P", $sec);

这段代码可以输出带有秒和小数秒的ISO 8601格式的日期时间。例如,输出结果可能是`2015-07-19T16:59:16.0113674-07:00`。

原文中提到的参考链接中的代码存在错误,可以参考另一个回答中的代码进行修正。

0
0 Comments

问题出现的原因:

ISO 8601是一种日期和时间表示的国际标准,它定义了日期和时间的格式。在PHP中,使用date函数可以获取当前的日期和时间,但默认的格式不包含秒和小数秒。因此,需要找到一种方法来获取带有秒和小数秒的ISO 8601格式的日期。

解决方法:

为了获得带有秒和小数秒的ISO 8601格式的日期,可以使用substr_replace函数来替换date函数返回的字符串中的部分内容。具体步骤如下:

1. 使用date函数获取当前的日期和时间,其中参数'c'表示ISO 8601格式。

2. 使用microtime函数获取当前时间的微秒数,返回一个包含秒和微秒的字符串。

3. 使用substr函数截取microtime函数返回的字符串的一部分,保留从第一个字符开始的第1到第8个字符,即秒和小数秒的部分。

4. 使用substr_replace函数将步骤3中截取的秒和小数秒的部分插入到步骤1中date函数返回的字符串中的特定位置,即第19个字符的位置。

5. 最终得到的字符串即为带有秒和小数秒的ISO 8601格式的日期。

下面的代码展示了如何在PHP中使用substr_replace函数来获取带有秒和小数秒的ISO 8601格式的日期:

substr_replace(date('c'), substr(microtime(), 1, 8), 19, 0);

使用上述代码,可以获得性能最佳的方式来获取带有秒和小数秒的ISO 8601格式的日期。

0
0 Comments

问题的出现原因是在使用PHP中获取带有秒.秒数的ISO 8601日期格式时,发现使用date('Y-m-d\TH:i:s.uP')存在一个bug,返回的结果中秒数的小数部分始终为0。

解决方法是使用microtime()函数来获取秒数的小数部分,并将其与date()函数返回的日期和时间字符串进行组合,得到完整的ISO 8601日期格式。

以下是解决方法的代码示例:

date('Y-m-d\TH:i:s') . substr(microtime(), 1, 8) . date('P');

或者,为了避免调用两次date()函数:

date(sprintf('Y-m-d\TH:i:s%sP', substr(microtime(), 1, 8)));

需要注意的是,这种方法仍然存在一个问题,即调用date()和microtime()函数时返回的系统时间可能不同,导致生成的时间戳不准确。

因此,不建议使用上述方法来获取带有秒.秒数的ISO 8601日期格式,而是建议使用microtime()函数来获取秒数的小数部分,然后与date()函数返回的日期和时间字符串进行组合,以确保准确性。

0