PHP从数据库中提取数据并将日期转换为iso8610 JavaScript日期

时间:2013-03-14 20:32:05

标签: php javascript sql iso8601

我有PHP代码,可以从数据库中提取所需的信息。 php日期代码的格式为“format(”Y-m-d H:i:s“)”“。我试图从数据库中获取这些日期,并使用JavaScript将它们添加到日历中。我在那里循环我要添加到日历的事件。我必须以不同的方式找到解决方案,但两者都不起作用。

<script type='text/javascript'>
    <?php for($x = 0; $x < count($events); $x++) { ?>
          var dateToConvert = new Date('<?php echo date(DATE_ISO8601, strtotime($events[$x]["startDate"])); ?>');
          var startDate = dateToConvert.toISOString();
          var endDate = '<?php echo date(DATE_ISO8601, strtotime($events[$x]["endDate"])); ?>';
          var events = [
             {
               title: '<?php echo $events[$x]["name"]; ?>',
               start: new Date(startDate),
               end: endDate
             }
          ];
    <?php } ?>
</script>

我假设我错过了一些小事,但我无法理解。我使用了Chrome调试器,这就是我输入的内容。 (2013-03-18T01:00:00-0600)它似乎没有像它应该的那样结束Z.

数据库中的值为(2013-03-18 01:00:00)。

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您不应以任何字符串格式传递日期。相反,将它们作为数字传递。

var dateToConvert = new Date();
dateToConvert.setTime(<?php echo strtotime($events[$x]['startDate']); ?>000);

这将更可靠地工作。请注意,这里有三个零,因为JS以毫秒为单位处理时间,而PHP则在几秒钟内完成。

答案 1 :(得分:0)

您的ISO时间格式正确。日期时间结束时的“Z”表示“Zulu时间”,即UCT时区。

因此,如果您未指定其他时区,则只能指定“Z”。

在您的情况下,您引用的日期确实包含时区(-6000),因此我不希望看到“Z”。

有关详细信息,请参阅维基百科页面:http://en.wikipedia.org/wiki/ISO_8601#Time_zone_designators

对于在PHP和Javascript之间移动日期/时间值,我想说最简单的方法就是使用unix时间戳。它是一个简单的整数值,所以没有可以考虑的格式,两种语言都完全理解它。唯一需要注意的是,在Javascript中,PHP的时间是微秒与秒,所以你需要乘以或除以1000.但这很简单。