Php 周数唯一可排序整数id

Php 周数唯一可排序整数id,php,datetime,Php,Datetime,我的问题是关于编程原理的,我用PHP语言给出了一个例子,但可以用任何编程语言提出: 如果我必须给一天指定一个唯一的可排序整数ID,我可以使用'Ymd'格式 如果我必须给一个月指定一个唯一的可排序整数ID,我可以使用'Ym'格式 如果我必须为一周指定一个唯一的可排序整数ID,我不能使用'YW'格式 由于2017-01-01和2017-12-31将返回相同的周ID: $date1 = DateTime::createFromFormat('Y-m-d', '2017-01-01'); $date

我的问题是关于编程原理的,我用PHP语言给出了一个例子,但可以用任何编程语言提出:

  • 如果我必须给一天指定一个唯一的可排序整数ID,我可以使用
    'Ymd'
    格式
  • 如果我必须给一个月指定一个唯一的可排序整数ID,我可以使用
    'Ym'
    格式
  • 如果我必须为一周指定一个唯一的可排序整数ID,我不能使用
    'YW'
    格式
由于
2017-01-01
2017-12-31
将返回相同的周ID:

$date1 = DateTime::createFromFormat('Y-m-d', '2017-01-01');
$date2 = DateTime::createFromFormat('Y-m-d', '2017-12-31');
echo $date1->format('YW').' '.$date2->format('YW');
// returns 201752 201752

所以我可以使用一周的第一天ID作为唯一的可排序整数ID week,但是可能有更简单的方法来解决它?更好的做法?

您可以使用
o

echo $date1->format('oW').' '.$date2->format('oW');
//201652 201752
o ISO-8601周编号年份。该值与Y值相同,只是如果ISO周数(W)属于上一年或下一年,则使用该年。(在PHP 5.1.0中添加)


您可以改用
o

echo $date1->format('oW').' '.$date2->format('oW');
//201652 201752
o ISO-8601周编号年份。该值与Y值相同,只是如果ISO周数(W)属于上一年或下一年,则使用该年。(在PHP 5.1.0中添加)


当使用数字和时,您必须注意。在php.net上已经有一个关于6年前这个场景的贡献说明。看一看,希望这有助于你清楚地理解:)

原因:

Y
是从日期算起的年份

o
是ISO-8601年编号

W
是ISO-8601年的周数

$date1 = DateTime::createFromFormat('Y-m-d', '2017-01-01');
$date2 = DateTime::createFromFormat('Y-m-d', '2017-12-31');
echo $date1->format('YW').' '.$date2->format('YW');
echo PHP_EOL;
echo $date1->format('oW').' '.$date2->format('oW');

演示:

在使用年数的周数时,必须注意。在php.net上已经有一个关于6年前这个场景的贡献说明。看一看,希望这有助于你清楚地理解:)

原因:

Y
是从日期算起的年份

o
是ISO-8601年编号

W
是ISO-8601年的周数

$date1 = DateTime::createFromFormat('Y-m-d', '2017-01-01');
$date2 = DateTime::createFromFormat('Y-m-d', '2017-12-31');
echo $date1->format('YW').' '.$date2->format('YW');
echo PHP_EOL;
echo $date1->format('oW').' '.$date2->format('oW');

演示:

正是我需要的,非常感谢您的帮助正是我需要的,非常感谢您的帮助非常感谢,我不知道
'o'
格式。非常感谢,我不知道
'o'
格式。