【问题标题】:jQuery datepicker convert to date() on PHPjQuery datepicker 在 PHP 上转换为 date()
【发布时间】:2013-10-27 06:37:41
【问题描述】:

我有一个这样保存日期的脚本。

$date = date('i')+50;

当我将它存储在我的数据库中时,我得到了类似 1382851302 的东西,它非常适合使用 > 或 <.> 来比较过去和未来

在管理员脚本的其他部分,我使用了基于 jQuery datepicker 的过滤器。问题是我无法将在那里选择的日期转换为相同的date() 格式,所以我可以比较日期,我认为时间在某种程度上涉及到这里(i),我不能。

这是我的错误尝试。

$iniciopub = date('Y-m-d',strtotime($_POST['iniciopub']));
 
$finpub = date('Y-m-d',strtotime($_POST['finpub']));

这不起作用..(它只存储“1970”)

如果我试试这个..

  $iniciopub = date($_POST['iniciopub']);
     
    $finpub = date($_POST['finpub']);

我只是保存一天,我认为因为格式就像 00/00/0000 所以 / 正在“削减”值,因为我可以保存 int。在数据库中你可以看到我需要的格式,我只需要数字。

真的迷路了,对不起,如果这是一个愚蠢的问题。

我正在学习,所以不要那么努力。

编辑:
好的,这是我的代码,现在我正在使用 mktime()

$iniciodate = str_replace("/",",",$_POST['iniciopub']);
           $iniciopub = mktime(0,0,0,$iniciodate);
           
           $findate = str_replace("/",",",$_POST['finpub']);
           $finpub = mktime(0,0,0,$findate);

这会将其保存到 2013 年 10 月 27 日的时间戳 = 1382824800,但对于 2013 年 10 月 31 日则相同

我也是用这个格式的,没问题

dateFormat: 'mm/dd/yy',

现在在 datepicker jQuery UI 中设置

【问题讨论】:

    标签: php date jquery-ui-datepicker


    【解决方案1】:

    您的变量$iniciopub 具有值1970-01-01,因为strtotime() 返回了false

    var_dump( strtotime($_POST['iniciopub']) );
    

    看看supported date and time formats。如果你说你在$_POST 中有00/00/0000 之类的格式,那么strtotime 假定这是美国的月、日和年(mm/dd/yyyy),就像它所说的here

    如果输入格式00/00/0000dd/mm/yyyy,那么最简单的方法是使用DateTime::createFromFormatstr_replace('/', '-', 'dd/mm/yyyy'); 使其成为欧洲日期格式dd-mm-yyyy

    问题更新

    这段代码是错误的:

    $iniciodate = str_replace("/",",",$_POST['iniciopub']);
    $iniciopub = mktime(0,0,0,$iniciodate);
    

    mktime() 有 6 个参数(第 7 个是 is_dst,现在不重要了)。你不能像那样使用$iniciodate,因为你在mktime()函数中只输入了第4个参数,而不是你想象的第4个、第5个和第6个。

    mktime(0,0,0,'10,27,2013');mktime(0,0,0,10,27,2013);`mktime(0,0,0,'10','27','2013'); 不同。日期10/27/201310/31/2013 返回相同时间戳的原因是因为在这两种情况下,当您将字符串10,27,201310,31,2013 转换为整数(第4 个参数)时,您会得到10。见:

    $v = '10,27,2013'; var_dump( (int)$v ); # int(10)
    $v = '10,31,2013'; var_dump( (int)$v ); # int(10)
    

    因此,如果您像这样调用mktime(),您的调用是一样的:

    var_dump(  mktime(0,0,0,10) ); # int(1382832000)
    

    如果您启用 error_reporting(将 error_reporting(-1); 放在 php 文件的开头),您会看到,在调用 mktime(0,0,0,$iniciodate) 后您会收到 NOTICE:

    注意:在第 XX 行的 file.php 中遇到格式不正确的数值

    由于10/27/201310/31/2013 是标准的美国日期格式,您可以只使用strtotime() 而不是mktime() 将日期转换为时间戳:

    var_dump( strtotime('10/27/2013') ); # int(1382832000)
    var_dump( strtotime('10/31/2013') ); # int(1383177600)
    

    您在 cmets 中提问:if i store a date as dd-mm-yyyy. how can i compare the date with other date. am i doing fine storing as timestamp?

    是的,您可以将它们存储为时间戳。但是我已经很久没有在我的代码中使用时间戳了,我将日期存储为 YYYY-MM-DD;在 RDBMS 中,这是一种最佳实践。

    【讨论】:

    • 或者如果我将日期存储为 dd-mm-yyyy。我如何将日期与其他日期进行比较。我可以很好地存储为时间戳吗?
    • @MonchoChavez: np mate,很高兴我能帮上忙。
    【解决方案2】:

    在 PHP 中不要转换为 mktime 的更好方法 - 已将数据另存为 mktime:

    function mdf_init_calendars() {
    jQuery(".mdf_calendar").datepicker(
            {
                showWeek: true,
                firstDay: 1,
                changeMonth: true,
                changeYear: true,
                showButtonPanel: true,
                onSelect: function(dateText, self) {
                    var date = new Date(parseInt(self.currentYear, 10), parseInt(self.currentMonth, 10), parseInt(self.currentDay, 10), 23, 59, 59);
                    var mktime = (date.getTime() / 1000);
                    jQuery(this).prev('input[type=hidden]').val(mktime);
                }
            }
    );
    jQuery(".mdf_calendar").datepicker("option", "dateFormat", 'dd-mm-yy');
    jQuery(".mdf_calendar").datepicker("option", "showAnim", 'fadeIn');
    //+++
    jQuery(".mdf_calendar").each(function() {
        var mktime=jQuery(this).prev('input[type=hidden]').val();
        var date = new Date(mktime*1000);
        jQuery(this).datepicker('setDate', new Date(date));
    });
    

    }

    您将数据保存在隐藏输入中,并在页面加载时加载它们,因此在 PHP 代码中您始终可以获得 mktime 并且不需要考虑数据格式,您可以根据需要在 js 中设置它(例如内联) PHP:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多