1

我无法通过模型在数据库中保存日期。在我的控制器中,如果我在日志中转储从 $_POST 收到的日期,我会以这种格式“10/Nov/2012 07:30”获得日期。如果我使用:

$AccountAppointment->start_date=Yii::app()->dateFormatter->format($_POST['AccountAppointment']['start_date'], 'dd/M/yyyy HH:mm');

我得到错误:

Invalid datetime format: 1292 Incorrect datetime value: '10/NoGMT+5/2012 07:30' for column 'start_date' 

将 dateFormatter 中的格式更改为 'dd/M/yyyy HH:mm' 或 'dd/MM/yyyy HH:mm' 或 'dd/MMM/yyyy HH:mm' 会引发相同的错误。

Db 是 MySQL 5.0,Yii 版本 1.1.12。

任何帮助将不胜感激,我几乎被卡住了....谢谢....

4

6 回答 6

0

我找不到将 dd/MMM/yyyy HH:mm 日期格式转换为 MySQL 的任何转换,因此创建了我自己的方法。这只是一种解决方法,一旦我想出一个更优雅的解决方案,我会更新我的答案。以下是我创建的方法:

    public function returnDate($inputDate){
    //Input format of date is : dd/MMM/yyyy HH:mm, example: 02/Feb/2012 18:20. The method converts the format to YYYY-MM-DD H:i which is compliant to MySQL 5.0 or above.
    $retval='';
    $dd=substr($inputDate, 0,2);
    $mm=substr($inputDate, 3,3);
    $yy=substr($inputDate,7,4);
    $tt=substr($inputDate,12,5);
    $month=0;
    switch($mm){
        case "Jan":
            $month='01';
            break;
        case "Feb":
            $month='02';
            break;
        case "Mar":
            $month='03';
            break;
        case "Apr":
            $month='04';
            break;
        case "May":
            $month='05';
            break;
        case "Jun":
            $month='06';
            break;
        case "Jul":
            $month='07';
            break;
        case "Aug":
            $month='08';
            break;
        case "Sep":
            $month='09';
            break;
        case "Oct":
            $month='10';
            break;
        case "Nov":
            $month='11';
            break;
        case "Dec":
            $month='12';
            break;
    }
    $retval=$yy.'-'.$month.'-'.$dd.' '.$tt;
    return $retval;
}
于 2012-11-11T09:24:49.610 回答
0

更改日期选择器中的格式,默认为 yy-mm-dd

于 2014-02-05T10:14:28.490 回答
0

我认为您不了解格式功能。请看下文。

/**
 * Formats a date according to a customized pattern.
 * @param string $pattern the pattern (See {@link http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns})
 * @param mixed $time UNIX timestamp or a string in strtotime format
 * @return string formatted date time. Null if $time is null. (the null value check is available since Yii 1.1.11)
 */
public function format($pattern,$time){
----------------------
}

您需要切换日期格式和时间。这是对的:

  $AccountAppointment->start_date=Yii::app()->dateFormatter->format('dd/MM/yyyy HH:mm' ,$_POST['AccountAppointment']['start_date']);

希望我能帮助别人:)

于 2014-03-19T07:23:20.690 回答
0

我过去曾使用过类似的东西。我使用 CDateTimeParser 来解析日期,然后按照您想要的方式对其进行格式化。

echo Yii::app()->dateFormatter->formatDateTime(
    CDateTimeParser::parse($classified->create_date, 'yyyy-MM-dd'
),'medium',null);

我假设你可以这样做:

echo Yii::app()->dateFormatter->formatDateTime(
    CDateTimeParser::parse($classified->create_date, 'dd/MMM/yyyy HH:mm'
),'full',null);

或者

echo Yii::app()->formatter->datetime(
    CDateTimeParser::parse($classified->create_date, 'dd/MMM/yyyy HH:mm')
);
于 2012-11-10T16:58:47.823 回答
0

您使用了错误的格式。“Nov” 对应于模式MMM,而不是M(即月份作为整数,没有任何前导零)。

于 2012-11-10T17:01:38.947 回答
0

您可以使用内置的 CDateTimeParser:

date('Y-m-d H:i:s', CDateTimeParser::parse($input, $format, array('second'=>0)))

测试:

$inputs = array('10/Nov/2012 07:30', '31/Jan/2012 23:59');
$format = 'dd/MMM/yyyy HH:mm';
foreach($inputs as $input)
{
    echo $input . ' -> ' . date('Y-m-d H:i:s', CDateTimeParser::parse($input, $format, array('second'=>0)));
    echo '<br>';
}

输出:

10/Nov/2012 07:30 -> 2012-11-10 07:30:00
31/Jan/2012 23:59 -> 2012-01-31 23:59:00

此外,我为上面编写了一个包装函数以考虑比较运算符,因此您可以在 CGridView 过滤器中使用本地化的日期时间。也许它可以提供任何帮助。请参阅:https ://stackoverflow.com/a/53759001/3090890

于 2018-12-13T10:28:47.560 回答