首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将PHP格式转换为jQueryUI数据交换日期格式

将PHP格式转换为jQueryUI数据交换日期格式
EN

Stack Overflow用户
提问于 2013-05-22 22:06:32
回答 5查看 11.2K关注 0票数 14

编辑:我想人们很难准确理解我的意思,所以我完全重写了我的解释。

我从事一个项目,用户可以在这个项目中定义整个网站中使用的日期格式。它使用PHP的日期格式标准。例如:“年度月日”由"Y-m-d“设置。

PHP标准使用单字符符号,如Y,m,d,F,j来描述日期格式.如文档所示:http://www.php.net/manual/en/function.date.php

有时,用户可以选择一个日期,这要归功于一个jQueryUI数据报警器。这个组件用代码描述它的日期格式,例如yy,y,mm,dd,D,. http://api.jqueryui.com/datepicker/#utility-formatDate

我想以相同的格式显示PHP和Datepicker的日期。我的意思是,PHP应该按照用户设置的格式输出日期,数据报警器应该在中以相同的格式显示选定的日期--。

鉴于此:

  1. 日期格式必须描述为"PHP样式“
  2. 我不知道用户设置了哪种格式,

/!\这不是如何从已知格式读取/解析/显示日期的问题。

不幸的是,Javascript日期格式描述与PHP不一样。例如,这2种日期格式是等价的,但在PHP和Javascript中有不同的描述:

  1. PHP :Y(由用户设置)
  2. Javascript :yy dd

正如您所看到的,我不能仅仅使用PHP格式配置datepicker,因为它将被误解,或者根本不被识别。

有人(在下面的答案)建议创建我自己的“日期格式标准转换器”,将每个PHP符号与其对应的JS日期格式描述相匹配。就像:

  • Y => yy
  • M => mm
  • D => dd
  • Y => y
  • Z => o
  • ..。

然后将每个PHP符号替换为JS。所以"d/m/Y“将被神奇地翻译成"dd/mm/yy”。

但是也许有人知道另一种让jQueryUI数据报警器理解PHP格式标准的正确方法?

编辑:我编写了一个教程,说明了问题和解决方案。用于进一步阅读:http://tristan-jahier.fr/blog/2013/08/convertir-un-format-de-date-php-en-format-de-date-jqueryui-datepicker

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-05-23 23:03:46

我选择了一种残酷的方法:逐符号转换日期格式.我做了一个“不那么笨”的代码片段。

代码语言:javascript
复制
/*
 * Matches each symbol of PHP date format standard
 * with jQuery equivalent codeword
 * @author Tristan Jahier
 */
function dateformat_PHP_to_jQueryUI($php_format)
{
    $SYMBOLS_MATCHING = array(
        // Day
        'd' => 'dd',
        'D' => 'D',
        'j' => 'd',
        'l' => 'DD',
        'N' => '',
        'S' => '',
        'w' => '',
        'z' => 'o',
        // Week
        'W' => '',
        // Month
        'F' => 'MM',
        'm' => 'mm',
        'M' => 'M',
        'n' => 'm',
        't' => '',
        // Year
        'L' => '',
        'o' => '',
        'Y' => 'yy',
        'y' => 'y',
        // Time
        'a' => '',
        'A' => '',
        'B' => '',
        'g' => '',
        'G' => '',
        'h' => '',
        'H' => '',
        'i' => '',
        's' => '',
        'u' => ''
    );
    $jqueryui_format = "";
    $escaping = false;
    for($i = 0; $i < strlen($php_format); $i++)
    {
        $char = $php_format[$i];
        if($char === '\\') // PHP date format escaping character
        {
            $i++;
            if($escaping) $jqueryui_format .= $php_format[$i];
            else $jqueryui_format .= '\'' . $php_format[$i];
            $escaping = true;
        }
        else
        {
            if($escaping) { $jqueryui_format .= "'"; $escaping = false; }
            if(isset($SYMBOLS_MATCHING[$char]))
                $jqueryui_format .= $SYMBOLS_MATCHING[$char];
            else
                $jqueryui_format .= $char;
        }
    }
    return $jqueryui_format;
}

这个函数处理PHP和Datepicker数据格式标准之间的所有通用代码。

此外,我还添加了对字符转义的支持:

d m \o\f Y变成dd mm 'of' yy

您可能仍然有问题的符号,如'W','L‘,没有同等处理的数据报警器。

票数 34
EN

Stack Overflow用户

发布于 2013-05-22 22:20:17

您不能对datepicker使用与PHP相同的格式。

由于PHP的日期格式只使用单个字母代码,所以最好采用PHP格式,并将每个代码替换为jQuery数据交换格式中的相应值,例如:

代码语言:javascript
复制
$PHPFormatOptions = array('y', 'Y', 'm', 'd');
$JSFormatOptions = array('yy', 'yyyy', 'mm', 'dd'); // and so on
$JSFormat = str_replace($PHPFormatOptions, $JSFormatOptions, $PHPFormat);
票数 4
EN

Stack Overflow用户

发布于 2013-05-22 22:38:31

我不确定我是否同意你,但这真的不应该是个问题。您可以解析前端输入:使用DateTime::createFromFormat 请参阅这方面的php文档,也可以使用JSON。

由于JSON有一种公认的格式化日期字符串的标准方法,所以您可以将输入日期的JSON字符串版本传递给PHP和json_decode it服务器端。这两种解决方案都对您开放,不过我相信在您的情况下,第一种解决方案更容易实现。

如果您希望能够选择两边的格式,那么DateTime对象绝对是您所需要的:

代码语言:javascript
复制
$date = new DateTime();
echo $date->format('Y-m-d').' <==> '.$date->format('y-M-j');
$postDate = $date->createFromFormat('y-m-d',$_POST['submitDate']);
echo $postDate->format('Y-m-d');

格式将在我链接到的页面上解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16702398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档