2012-12-19 51 views
1

我有以下情况:Datepicker供用户选择Year,Month,并用它来显示所选月份的记录。使用Ajax将选定的值传递给details_subcontractor.php。日期选择器已从jQuery UI DatePicker to show month year only中的已接受答案中修改。下面的示例代码:在PHP 5.2.6中获取第一个月的第几天?

/** 
* Datepicker in datepicker.php 
* 
*/ 

$("#year_month").datepicker({"dateFormat":"yy-mm-dd", 
    changeMonth: true, 
    changeYear: true, 
    dateFormat: 'yy-mm', 
    showButtonPanel: true, 
    onClose: function(dateText, inst) { 
     var month = $("#ui-datepicker-div .ui-datepicker-month :selected").val(); 
     var year = $("#ui-datepicker-div .ui-datepicker-year :selected").val(); 
     $(this).datepicker('setDate', new Date(year, month, 1)); 
    } 
}); 

/** 
* Ajax call 
* 
*/ 

var year_month = $("#year_month").val(); 
$.ajax({ 
    url:"details_subcontractor.php", 
    data:{ 
     year_month:year_month 
    }, 
    success:function(data){ 
     $("#content_report").html(data); 
    } 
}); 


/** 
* details_subcontractor.php 
* 
*/ 

//$_GET['year_month']; //2012-12 
$start = date('Y-m-d', strtotime($_GET['year_month']));      //2012-12-18 
$start = date('Y-m-d', strtotime('first day of ' . $_GET['year_month'])); //1970-01-01 
$start = date('Y-m-d', strtotime($_GET['year_month'] . ' first day'));  //2012-12-19 
$end = date('Y-m-d', strtotime('last day of ' . $_GET['year_month'])); //1970-01-01 
$end = date('Y-m-d', strtotime($_GET['year_month'] . ' last day'));  //2012-12-17 

但是,随着在线评论节目,我不能让第一天和月的最后一天。我知道'''是在PHP 5.3中引入的,其中包含'of'的两行失败,但我不理解其他三行的输出。 我最后加上'-01'和'-31'来表示月份的第一天和最后一天。有没有人有更好的解决方案,在PHP 5.2.6中工作?

+2

由于您知道PHP5.3,但仍然需要5.2的答案,我想你正在使用拒绝升级的托管服务提供商。需要注意的是,PHP 5.2在两年内完全不受支持,[5.2.6已近5年](http://uk.php.net/releases/index.php)。即使在最新的5.2版本中,也存在已知的安全问题,这些安全问题不会被修补。如果你的主机没有跟上安全补丁五年,你应该认真切换到一个更好的主机。 – SDC

+0

它实际上是我公司的开发服务器。你的回答让我感到惊讶,我会看看我能对他们做些什么。 –

回答

3

您可以放心地假设每个月的第一天是1。使用

date('Y-m-t', strtotime($_GET['year_month'])); 

该月的最后一天。

+0

我们确定每个月的第一天会是第一天? :) – webnoob

+1

不,伙计,有些月份从第3天开始...... – Hast

+0

谢谢,我会回到我的工作场所尝试它,但'吨'是为了吗? 编辑:@Hast回答了我。 –

2
// The first day is always 01, so you can hardcode it 
$start = date('Y-m-01', strtotime($_GET['year_month'])); 

// last day you can get by `t` format parameter, which contains total days count for given month. 
$end = date('Y-m-t', strtotime($_GET['year_month']));