strtotime()在字符串“now”的不同时区返回不同的Unix时间戳

时间:2013-08-14 05:26:39

标签: php

php > echo strtotime("now America/New_York")."\n";
1376459035 // -> 2013-08-14 05:43:55 - Wrong

php > echo strtotime("now UTC")."\n";
1376444635 // -> 2013-08-14 01:43:55 - OK

php > echo time()."\n";
1376444635 // -> 2013-08-14 01:43:55 - OK

任何人都可以解释一下吗?

这是一些PHP的发明 - 时区 - “纠正”unix时间戳吗?

//编辑:

我意识到用“now”指定时区是没有意义的。然而,它确实与其他相对时间有关,例如“明天午夜”。在那里,取决于时区,“明天”可能是更远的一天,取决于时区是否已经超过午夜。这种行为同样很奇怪,只是有点难以解释。

2 个答案:

答案 0 :(得分:0)

正如Unix time wiki所述,Unix Epoch始终采用UTC格式。这就是

的输出原因
echo strtotime("now UTC");
echo time();

是一样的。根据{{​​3}}纽约时区UTC -5 hours。目前夏令时+1现在同样为UTC -4 hours。这就是你得到结果2013-08-14 05:43:55(4小时差异)的原因。

答案 1 :(得分:0)

您正在使用 byte[] binaryData = (byte[])((DataRowView)bindingSource_zQryRpt.Current).Row["ExportConfig"]; string XMLStored = System.Text.Encoding.UTF8.GetString(binaryData, 0, binaryData.Length); if (XMLStored.Length > 0) { IIDExportObject ExportConfig = new IIDExportObject(); var serializer = new XmlSerializer(ExportConfig.GetType()); //StringBuilder StringResult = new StringBuilder(XMLStored); // Load the XML from the Query into the StringBuilder // Now we need to build a Stream from the String to use in the XMLReader byte[] byteArray = Encoding.UTF8.GetBytes(XMLStored); MemoryStream stream = new MemoryStream(byteArray); using (var reader = XmlReader.Create(stream)) { ExportConfig = (IIDExportObject)serializer.Deserialize(reader); } } 就是为什么它在字符串的不同时区显示unix时间戳。

使用此功能:

strtotime("now America/New_York")