2012-01-31 59 views
1

我最近将网站移至新主机。服务器设置非常相似。我用简单的apache来复制新服务器上的配置。Zend Framework - 日期问题

但是,在前一台服务器上运行得很好的相同Zend框架Web应用程序在新服务器上存在此日期问题。

无论使用其中任何一种,插入到mysql datetime列的日期都不正确。

$row->creation_date = date('Y-m-d H:i:s'); 

$row->creation_date = date('Y-m-d H:i:s', TRUE); 

在datetime列的值是0000-00-00 00:00:00

如果我改变数据类型在MySQL喜欢VARCHAR,该值为2012

如果我添加一行权下的$行电话, mail(),给我发送date()的值,我得到正确的时间戳。

如果我Concat的日期()的值存储在不同的列同一行的另一个值,我得到1970-01-01 00:00:01

我难倒!

有什么建议吗?

编辑

代码没有变化,从老迁移到新的服务器之间进行。

旧服务器 Zend引擎V2.3.0,版权所有(C)1998-2011 Zend技术 与Ioncube公司PHP装载机v4.0.9,版权所有(C)2002-2011,由Ioncube公司有限公司和 与Zend卫队装载机V3.3,版权所有(C)1998-2010,由Zend技术

新服务器 这个程序可以使用Zend脚本语言引擎: Zend引擎V2.3.0,版权所有(C)1998-2011 Zend技术与ionCube PHP Loader v4.0.9,版权所有(c)2002-2011,由ionCube有限公司,和 与Zend Guard加载程序v3.3,版权所有(c)1998-2010,由Zend技术 用了Suhosin v0.9.32.1,版权所有(C)2007-2010,通过SektionEins GmbH的

WHM 11.30.5

CENTOS 6.2 x86_64的

PHP 5.3.8

MYSQL 5.0。 92

Zend Framework const VERSION ='1.9.5';

问题描述简介: 虽然php date()提供了正确的日期值,但zend框架在尝试插入到mysql datetime字段之前将值更改为仅仅一年。我相信有什么会导致zend在插入之前更改日期值,但无法找到什么。

public function addComment(Core_Model_Item_Abstract $resource, Core_Model_Item_Abstract $poster, $body) 
{ 
$table = $this->getCommentTable(); 
$row = $table->createRow(); 

if(isset($row->resource_type)) 
{ 
    $row->resource_type = $resource->getType(); 
} 

$row->resource_id = $resource->getIdentity(); 
$row->poster_type = $poster->getType(); 
$row->poster_id = $poster->getIdentity(); 

$row->creation_date = date('Y-m-d H:i:s'); // this date() is throughout app 
//if I put mail(send me date('Y-m-d H:i:s') I got correct time stamp) 
$row->body = $body; 
$row->save(); 

if(isset($resource->comment_count)) 
{ 
    $resource->comment_count++; 
    $resource->save(); 
} 

return $row; 
} 

MySQL表:

CREATE TABLE `comments` (
`comment_id` int(11) unsigned NOT NULL auto_increment, 
`resource_id` int(11) unsigned NOT NULL, 
`poster_type` varchar(24) character set latin1 collate latin1_general_ci NOT NULL, 
`poster_id` int(11) unsigned NOT NULL, 
`body` text collate utf8_unicode_ci NOT NULL, 
`creation_date` datetime NOT NULL, 
`like_count` int(11) unsigned NOT NULL default '0', 
PRIMARY KEY (`comment_id`), 
KEY `resource_type` (`resource_id`), 
KEY `poster_type` (`poster_type`,`poster_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 
+0

建议:比较_framework_(在整个名单没有给出)的版本。观察:_“如果我将mysql中的数据类型更改为类似varchar的值,则值为2012”_使我认为该变量在查询中引用错误.... Evil ... – Wrikken 2012-01-31 23:22:35

+0

是您试图格式化的这些存储日期或你在寻找当前的时间戳吗? – RockyFord 2012-02-01 04:10:56

+0

@chris:那不是Zend ** Framework **版本。 'Zend Engine!= Zend Framework'。 – Wrikken 2012-02-01 11:48:53

回答

0

我解决了这个问题,用替换PHP date()功能:

new Zend_Db_Expr('NOW()'); 
+0

我想补充说,升级PHP到5.3.27后,我不再有Zend Framework中的日期问题,所以如果任何人有Zend日期问题, 。 – Chris 2013-11-20 04:37:08

0

它是一个32位的机器?32位机器在2025年之后PHP strtotime不能正常工作。只是一个想法。

+0

仍然没有解决方案! :(顺便说一句,它的64位 – Chris 2012-02-14 00:35:22

+0

:(没有答案仍... – Chris 2012-05-04 23:56:46