谷歌站点地图日期格式

28

我需要在PHP中为站点地图设置日期格式。

我该如何做到这一点?

这个输出结果是正确的吗?

<lastmod>2012-08-02EEST18:01:18+03:00</lastmod>

你的意思是机器人抓取的网站地图吗? - Abderrazak BOUADMA
10个回答

46

如果你有时间戳,可以按照以下方式正确格式化日期:

<lastmod><?php echo date('c', $timestamp); ?></lastmod>

时间戳可以是 time()(表示当前时间),或者是像 strtotime() 这样获取 Unix 时间戳的其他方法。


我正在从数据库接收lastmod数据。它是datetime格式。我正在使用strtotime进行转换。如果类型对于Google正确,它就可以工作。谢谢。 - user1329212

28

使用以下参数将当前时间戳格式化为 W3C Datetime 编码(用于 sitemap.xml 文件)。

echo date('Y-m-dTH:i:sP', time());

从PHP5开始,您还可以使用c格式字符打印完全相同的字符串。

echo date('c',time());

这两个代码都会输出以下内容:

2009-04-03T11:49:00+01:00

来源


2
你提供的日期字符串是@user1329212问题的原因。我已经将正确的字符串发布为答案。 - AdamJones
3
@AdamJones 和 @NXT 的回答是正确的:如果你使用日期格式字符串Y-m-dTH:i:sP,你需要转义T,即Y-m-d\TH:i:sP。但是使用PHP5选项date('c',time())可以完美地解决问题。 - FluffyKitten
1
@FluffyKitten 对我来说可以工作,我的问题是“T”字符,通过转义字符解决了问题!谢谢! - Jasson Rojas

22

要将MySQL的日期时间格式转换为网站地图中lastmod所需的格式,只需使用以下PHP代码。

$lastmod = '2012-11-28 10:53:17'; //MySQL datetime format

$datetime = new DateTime($lastmod);
$result = $datetime->format('Y-m-d\TH:i:sP');

echo $result; //2012-11-28T10:53:17+01:00

3
可以使用更短的格式 $result = $datetime->format('c'); - dotoree

12

根据Google的说法, value是一个可选字段,如果提供了,则必须格式化为

YYYY-MM-DDThh:mmTZD 

SQL datetime的默认导出格式取决于您服务器的语言设置, 可能包含空格和字符化的TZD,例如:

2014-09-19 10:33:05 UTC

W3规定,TZD可以采用三种格式之一进行格式化。

TZD = 时区指示符(Z或+hh:mm或-hh:mm)

必须删除默认格式中的任何空格;在时间之前必须插入字符“T”,并且TZD必须匹配支持的类型之一。

因此,要格式化当前时间戳,请使用以下参数。

echo date('Y-m-dTH:i:sP', time());

从PHP5开始,您也可以使用c格式字符来打印完全相同的字符串。

echo date('c',time());

6

我知道这个问题是关于 PHP 的,但我在谷歌搜索 Node/JavaScript 时发现了这个页面。所以最接近的等价物是 Date.toISOString()

var d = new Date();
d.toISOString(); // "2017-04-19T07:23:16.040Z"

如果在SO上还没有关于JavaScript版本的问题和答案,您应该考虑将其作为新问题添加,以供其他也在寻找答案的用户使用!请参阅回答自己的问题 - FluffyKitten

4
您看到这个输出是因为您使用了旧的建议时间戳字符串。
Y-m-dTH:i:sP.

然而,你所需要的是什么?
Y-m-d\TH:i:sP

单个反斜杠将起到关键作用。在某些情况下,大写字母T成为了PHP中表示时间戳的特殊字符,因此如果您不转义T,则会得到您要报告的内容。


2
实际上,有两种方法可以解决这个问题。
第一种方法是为XML站点地图设置一个有效日期,其中包括"C"字符,它的值为:(2019-06-03T17:30:21-05:00)。在此处测试一下。 <lastmod>'.date('c', strtotime($row['date'])).'</lastmod> 第二种方法是为RSS站点地图设置一个包含"r"字符的有效日期,其值为:(2019-03-07T17:55:44+00:00)<pubDate>'.date('r', strtotime($row['date'])).'</pubDate> 希望这能帮助您。谢谢

2

1

0

使用 moment.js;

moment().format('YYY-MM-DDTHH:mm:ssZ')

你能进一步解释一下吗?我认为 moment.js 并不适用于 PHP。 - Nico Haase

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