В Objective C, как мне взять дату GMT/UTC и применить правило ISO-8601, чтобы получить номер недели?Как получить ISO-8601 GMT/UTC Week Number Год
PHP генерирует недельный номер года в формате ISO-8601, когда используется оператор gmdate('W')
. Это, однако, не соответствует Objective C, когда вы пытаетесь просто взять GMT/UTC и получить номер недели, потому что это не делает это по ISO-8601. Вот что документация PHP говорит о ISO-8601 с 'W'
параметра:
"
W
: ISO-8601 номер недели в году, недели, начиная с понедельника" [курсив мой]
Итак, когда я смотрю на свой календарь на 2016 год, 26 января выпадает на неделю 05, если я пренебрегаю этим правилом «начиная с понедельника» и падает на 04, если принять это правило.
Сравните эти два примера, один в PHP, другой в Objective C, и вы получите два разных результата:
Objective C
NSCalendar *calender = [NSCalendar currentCalendar];
NSDateComponents *dateComponent = [calender components:(NSWeekOfYearCalendarUnit | NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:[NSDate date]];
NSString *sWeekNum = [NSString stringWithFormat:@"%ld",(long)dateComponent.weekOfYear];
if ([sWeekNum length] < 2) {
sWeekNum = [NSString stringWithFormat:@"0%ld",(long)dateComponent.weekOfYear];
}
NSLog(@"%@",sWeekNum);
PHP
<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// SET OUR TIMEZONE STUFF
try {
$sTimeZone = 'GMT';
if (function_exists('date_default_timezone_set')) {
date_default_timezone_set($sTimeZone);
} else {
putenv('TZ=' .$sTimeZone);
}
ini_set('date.timezone', $sTimeZone);
} catch(Exception $e) {}
echo gmdate('W') . "\n";
Для Например, сегодня 26 января 2016 года, 1:48 утра EST для меня. Объект C испускает 05
, а PHP испускает 04
.
Мне пришлось переключать NSInteger на длинный, но не такой, какой он работал. Вы знаете, как использовать NSDateFormatter для использования% W для создания двухзначной версии? – Volomike
Я обновил ответ – vadian
Спасибо, кучка. Когда я получу разрешение, я отмечу это как лучший ответ. – Volomike