Как я могу получить последние семь дней на голландском языке, используя PHP - PullRequest
1 голос
/ 25 сентября 2019

Я пытаюсь получить последние 7 дней недели на голландском языке.Получение последних 7 дней само по себе не проблема, я делаю это так:

function getLastNDays($days, $format = 'd/m'){
    $m = date("m"); $de= date("d"); $y= date("Y");
    $dateArray = array();
    for($i=0; $i<=$days-1; $i++){
        $dateArray[] = '' . date($format, mktime(0,0,0,$m,($de-$i),$y)) . '';
    }
    return array_reverse($dateArray);
}

$arr = getLastNDays(7, 'Y-m-d');

Когда я повторяю цикл над $arr и помещаю результаты в $day, это то, как выглядит каждый $day:

2019-09-19
2019-09-20
2019-09-21
2019-09-22
2019-09-23
2019-09-24
2019-09-25

Таким образом, чтобы получить его в сокращенной версии, внутри моего цикла я делаю:

$date = DateTime::createFromFormat("Y-m-d", $day);
$dag = $date->format("D");

Что дает мне:

Thu
Fri
Sat
Sun
Mon
Tue
Wed

Теперь перевестия узнал, что сначала могу использовать setlocale, а затем strftime, и теперь весь мой код выглядит так:

function getLastNDays($days, $format = 'd/m'){
    $m = date("m"); $de= date("d"); $y= date("Y");
    $dateArray = array();
    for($i=0; $i<=$days-1; $i++){
        $dateArray[] = '' . date($format, mktime(0,0,0,$m,($de-$i),$y)) . '';
    }
    return array_reverse($dateArray);
}

$arr = getLastNDays(7, 'Y-m-d');
foreach($arr as $day) {
    $date = DateTime::createFromFormat("Y-m-d", $day);
    $dag = $date->format("D");
    setlocale(LC_TIME, 'nl_NL');
    $dagnl = strftime('%a', $date);
    echo $dagnl . "<br>";
}

Но это дает мне всего 7 пустых строк (потому что
повторяется).Почему не работает?

Ответы [ 3 ]

5 голосов
/ 25 сентября 2019

Вы должны передать метку времени strftime, а не дате:

$dagnl = strftime('%a', $date->getTimestamp());

Вывод:

do

vr

za

zo

ma

di

wo

2 голосов
/ 25 сентября 2019

Хотя это не использует библиотеку PHP, но это обходной путь.

Вы можете попробовать что-то вроде

$weekday_dutch = array(
    "Sun" => "Zondag",
    "Mon" => "Maandag",
    "Tue" => "Dinsdag",
    "Wed" => "Woensdag",
    "Thu" => "Donderdag",
    "Fri" => "Vrijdag",
    "Sat" => "Zaterdag",
);

И просто использовать английские имена для конвертации в голландский язык с

$weekday_dutch["Sun"]
0 голосов
/ 25 сентября 2019

Вы передали объект DateTime в strftime вместо целого числа.

$dagnl = strftime('%a', $date);

Но зачем вся эта сложность!Вы можете получить последние 7 дней, используя только 2 строки кода:

<?php 
setlocale(LC_TIME, 'nl_NL');

for($i=7;$i>0;$i--)
    echo strftime('%a', strtotime("-{$i} days")) . "<br>";

Вывод:

wo
do
vr
za
zo
ma
di
...