为什么AliceBundle Fixture DateTime给我一个意外的值?

时间:2019-09-24 09:27:55

标签: symfony datetime alice-fixtures

我目前正在一个项目中,该项目中我使用Alice-bundle创建了夹具来运行测试以确保我的API端点正常工作。除DateTime属性外,其他一切都正常。

无论我传递什么字符串,例如:<dateTime('2019-09-23 14:00:00')>,它总是给我错误的日期和时间,通常是类似1998-10-25T14:29:45+01:00的字符串。

即使使用<dateTime('now')>也不起作用-它也为我提供了2000年前的日期和时间,而这正是我发现的一些示例所使用的。

灯具可能看起来像这样:

Path\To\Task\Entity: my_task: title: 'My tasks' description: 'These are all the tasks just for me!!!' startsAt: <dateTime('now')> endsAt: <dateTime('now')> createdBy: '@some_higher_user'

理想情况下,我只想向其传递一个字符串,以便可以定义日期和时间并确保其以正确的格式正常工作。

我们将不胜感激。

2 个答案:

答案 0 :(得分:2)

在这里https://github.com/nelmio/alice/blob/master/doc/advanced-guide.md#functions,我们读到:

  

函数可以是Faker或PHP本机函数(或在全局范围内注册)。

因此,我建议尝试使用创建\DateTime对象的PHP本机函数

<date_create_from_format ( 'Y-m-d H:i:s' , '2019-09-23 14:00:00')>
// or
<date_create('now')>

答案 1 :(得分:1)

这就是它的工作方式。 <dateTime()>函数采用名为$max的参数。因此,它要做的是在开始日期(不确定哪个日期,可能是1900年左右的日期)和该$max参数之间创建一个日期。

我猜您会想使用<dateTimeBetween()>,它需要一个startDate和endDate来在它们之间创建一个假日期。因此,我想如果startDate = endDate,那么您将获得所需的固定日期。

看看fzaninotto/Faker库文档。这是AliceBundle用来伪造数据的库。在那里,您可以看到可以使用哪些与DateTime相关的功能。