Php Carbon timestamp属性返回错误的日期毫秒

Php Carbon timestamp属性返回错误的日期毫秒,php,laravel,php-carbon,Php,Laravel,Php Carbon,我试图返回一个解析为当前服务器时区(存储在UTC中)的日期,该日期仅基于日期、月份和年份。因此,我有一个如下所示的函数: private function getFormattedDate(string $stringDate): array { $date = Carbon::createFromFormat( 'Y-m-d', $stringDate, config('app.timezone') ); return

我试图返回一个解析为当前服务器时区(存储在UTC中)的日期,该日期仅基于日期、月份和年份。因此,我有一个如下所示的函数:

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

    return [
        'date' => $date->timestamp,
        'timezone' => $date->timezoneName,
    ];
}
问题是数组中的
'date'
键总是得到157713131(以及每次执行该方法时的连续数字),因此:

  • 第一次执行:157711315
  • 第二次执行:157711325
  • 第三次执行:157711348
  • 等等
尽管时间戳在Y-m-d中表示正确的日期,但每次执行该方法时都不应该发生变化

那么,我如何解决这个问题,以毫秒为单位获得时间戳呢?我已经打印了
“日期”
碳素对象中的内容,它似乎有正确的日期信息:

^ 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)
}
预期产出为:

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

考虑到日期:
2019-12-23 10:08:54.0美国/波哥大(-05:00)

让我们试试这个,它应该适合您

$format='Y-m-d';
$date=Carbon::createFromFormat($format,'2009-02-15');
$nowinmillides=(int)($date->timestamp.str_pad($date->milli,3,'0',str_pad_LEFT));
echo$nowin毫秒;
你可以这样改变你的例子:

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

    return [
        'date' => $date->timestamp,
        'timezone' => $date->timezoneName,
    ];
}
私有函数getFormattedDate(字符串$stringDate):数组
{
$date=Carbon::createFromFormat(
“Y-m-d”,
$stringDate,
配置('app.timezone')
);
$DateInMillissions=(int)($date->timestamp.str_pad($date->milli,3,'0',str_pad_LEFT));
返回[
“date'=>$DateIn毫秒,
“时区”=>$date->timezoneName,
];
}
使用

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


createFromFormat
是一个本机PHP函数,默认情况下,如果
,它将占用当前时间(未指定的单位的当前值)前缀,每个值取最小值(小时/分钟/秒为0)。

PHP时间戳以秒为单位,而不是毫秒,因此除非在末尾添加3个0,否则使用该网站转换它将不起作用。请尝试此
日期(“Y-M-d H:i:s”,“$date->timestamp”)@aynber谢谢!我不知道。我将更新这个问题。现在时间戳位于正确的年、月和日期,但每次执行method@sta检查我问题中的预期输出<代码>日期(“Y-M-d H:i:s”,$date->timestamp)返回一个字符串格式的日期。您仅从该日期创建一个完整的日期时间,因此它将使用当前时间作为时间。因此,如果你在11:34运行它,它将使用11:34作为时间,无论是哪一天。10分钟后再次运行,时间戳现在显示为11:44。如果希望一天的开始为0,可以使用
$date->startOfDay()
修改对象,您将在时区键下发送格式化的日期。。。没什么意义。你说得对,我更新了它。
$date->format('Y-m-d)
不返回时间戳,它返回格式化的日期字符串,我需要时间戳。你能写下预期的输出吗?当然,我会在问题中添加它。