【问题标题】:PHP's date functions: converting from weeknumber back to monthPHP日期函数:从周数转换回月
【发布时间】:2012-04-21 15:49:02
【问题描述】:

鉴于以下信息:

  • 年份:2012
  • 周数:4
  • 日期:周二

如何使用 PHP 的日期函数将其转换为有效日期,例如 2012-01-12 (YYYY-MM-DD)?

感谢

【问题讨论】:

  • 如果你搜索一下 PHP 文档,你的键盘会打你吗?
  • 周数是ISO week吗?
  • @Truth 抱歉,不支持weaknumberDateTime::createFromFormat
  • @VIPINJAIN:你乘以 7?

标签: php datetime


【解决方案1】:

DateTime 类不能这样做,但函数 strptime 可以。

$d = strptime('TUE 4 2012', '%a %W %Y');
var_dump($d);

返回一个数组:

array
  'tm_sec' => int 0
  'tm_min' => int 0
  'tm_hour' => int 0
  'tm_mday' => int 24
  'tm_mon' => int 0
  'tm_year' => int 112
  'tm_wday' => int 2
  'tm_yday' => int 23
  'unparsed' => string '' (length=0)

请注意,tm_year 包含自 1900 年以来的年数,tm_month 从 0 开始,而不是从 1 开始。所以这确实代表 2012-01-24,这是正确的。

【讨论】:

  • 不错的答案..我不知道这个功能。所以我写了一个脚本:D检查一下...
【解决方案2】:

使用此功能:

function get_date($year,$week,$day,$start_sunday=false){
    $day_array = array('Mon'=>1,'Tue'=>2,'Wed'=>3,'Thu'=>4,'Fri'=>5,'Sat'=>6,'Sun'=>($start_sunday?0:7));
    $month_array = array(31,($year%4==0?29:28),31,30,31,30,31,31,30,31,30,31);
    $week *= 7;
    $month = 1;
    for($i=0;$i<count($month_array);$i++){
        if($week-$month_array[$i]<=0){
            break;
        }
        $week -= $month_array[$i];
        $month++;
    }
    $format = "$year $month $week";
    $date = date_create_from_format("Y m j",$format);
    $date_num = date_format($date,"D");
    $curr = $day_array[ucfirst(strtolower($day))]-$day_array[$date_num];
    $got_date = strtotime("$curr ".($curr==1||$curr==-1?"day":"days"),strtotime(date_format($date,"Y-m-j")));

    return $got_date;
}

如果一周从 sunday 开始,$start_sunday 应该是 true

$year 是年份 $week 是周数 $day 是简短的工作日名称,即星期一、星期二、星期三、....

此函数将为您提供给定格式的日期。

Enjoy............

【讨论】:

  • -1 因为它让我的眼睛受伤。并且有更多的规则来计算是否是闰年。并且不使用内置函数来完成这项工作。
  • 是的,我知道第 100 年还有更多规则:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2019-08-12
  • 1970-01-01
  • 2018-03-22
相关资源
最近更新 更多