簡體   English   中英

碳時間戳屬性返回錯誤的日期毫秒

[英]Carbon timestamp property returns wrong date millis

我正在嘗試僅根據日、月和年返回解析為當前服務器時區(以 UTC 格式存儲)的日期。 出於這個原因,我有一個看起來像這樣的 function:

private function getFormattedDate(string $stringDate): array
{
    $date = Carbon::createFromFormat(
        'Y-m-d',
        $stringDate,
        config('app.timezone')
    );

    return [
        'date' => $date->timestamp,
        'timezone' => $date->timezoneName,
    ];
}

問題是數組中的'date'鍵總是得到例如 1577113131 (以及每次我執行該方法時的連續數字),所以:

  • 首次執行:1577113515
  • 第二次執行:1577113525
  • 第三次執行:1577113548
  • 等等...

盡管時間戳表示 Ymd 中的正確日期,但每次執行該方法時都不應該發生變化。

那么,我該如何解決這個問題並以毫秒為單位獲取時間戳呢? 我已經打印了'date'碳 object 中的內容,它似乎有正確的日期信息:

^ Carbon\Carbon @1577113734 {#1048
#constructedObjectId: "00000000212d5614000000005c7c5f51"
#localMonthsOverflow: null
#localYearsOverflow: null
#localStrictModeEnabled: null
#localHumanDiffOptions: null
#localToStringFormat: null
#localSerializer: null
#localMacros: null
#localGenericMacros: null
#localFormatFunction: null
#localTranslator: null
#dumpProperties: array:3 []
#dumpLocale: null
date: 2019-12-23 10:08:54.0 America/Bogota (-05:00)
}

預期的 output 為:

'date' => 1577113734000,
'timezone' => 'America/Bogota'

計入日期: 2019-12-23 10:08:54.0 America/Bogota (-05:00)

讓我們試試這個,它應該適合你

$format = 'Y-m-d';
$date = Carbon::createFromFormat($format, '2009-02-15');
$nowInMilliseconds = (int) ($date->timestamp . str_pad($date->milli, 3, '0', STR_PAD_LEFT));
echo $nowInMilliseconds;

你可以像這樣改變你的例子:

private function getFormattedDate(string $stringDate): array
{
    $date = Carbon::createFromFormat(
        'Y-m-d',
        $stringDate,
        config('app.timezone')
    );

    $dateInMilliseconds = (int) ($date->timestamp . str_pad($date->milli, 3, '0', STR_PAD_LEFT));

    return [
        'date' => $dateInMilliseconds,
        'timezone' => $date->timezoneName,
    ];
}

使用!

$date = Carbon::createFromFormat(
    '!Y-m-d',
    $stringDate,
    config('app.timezone')
);

https://www.php.net/manual/en/datetime.createfromformat.php

createFromFormat是本機 PHP function 並且默認情況下它需要當前時間(您未指定的單位的當前值),如果! 使用前綴,每個都取最小值(因此小時/分鍾/秒為 0)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM