2

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

$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 中设置

4

2 回答 2

4

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

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

查看支持的日期和时间格式。如果您说您的格式类似于00/00/0000in $_POST,那么 strtotime 假定这是美国的月、日和年 ( mm/dd/yyyy),就像这里所说那样。

如果输入格式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,因为您只将第 4 个参数输入到mktime()函数中,而不是您可能认为的第 4、第 5 和第 6 个参数。

mktime(0,0,0,'10,27,2013');不等于mktime(0,0,0,10,27,2013);or `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/2013and10/31/2013是标准的美国日期格式,您可以只使用strtotime()而不是mktime()将日期转换为时间戳:

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

你在评论中问: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 中,这是一种最佳实践。

于 2013-10-27T07:33:57.500 回答
0

更好的方法不要在 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:

日期选择器的html+php代码

于 2014-06-10T11:13:48.147 回答