【问题标题】:Convert an array of string dates to timestamps [closed]将字符串日期数组转换为时间戳[关闭]
【发布时间】:2015-05-29 23:27:40
【问题描述】:

我有一个表单,其中包含一个名为“date[]”的输入框和一个允许您创建更多行以添加更多日期的按钮,所有这些都使用名称“date[]”。我的文本输入框中的日期选择器格式是 m-d-Y (03-15-2015)。当我提交表单时,我需要将日期数组转换为 mysql 日期格式 Y-m-d (2015-03-15)。我成功地在我的 php 脚本中的数组中捕获了日期数组,我正在尝试执行一个 foreach 循环并使用“strtotime”将每个日期 [] 值转换为时间戳,然后我将转换为正确的 Y-m-d 格式。问题是 strtotime 需要一个字符串而不是数组。

我的问题是如何遍历每个 date[] 值并将其转换为时间戳?没有固定数量的日期,它可以随着每个用户而改变。

提前谢谢你。

【问题讨论】:

  • 您说'strtotime 需要一个字符串而不是数组'。您还提到您成功捕获了日期数组,并且您正在循环它以从数组中提取每个日期。所以现在,你拥有的是每个日期,它是字符串类型的。那么是什么问题呢。。由于您没有共享任何代码,因此我无法具体告诉您。

标签: php mysql arrays date datetime


【解决方案1】:

您可以使用 array_map()array_walk() 来做到这一点

这是一个 array_walk 示例,可让您在调用时指定格式。

$dates = ['03-15-2015', '05-29-2015'];
array_walk($dates, function(&$date, $i, $formats)
{
    $datetime = DateTime::createFromFormat($formats['from'], $date);
    $date = $datetime->format($formats['to']);
}, ['from' => 'm-d-Y', 'to' => 'Y-m-d']);

【讨论】:

  • 那里很漂亮。谢谢您的答复。现在以正确的格式打印。
【解决方案2】:

使用 foreach :

$dates = $_POST['date']; // in case you are using POST request
foreach($dates as $date){
  $datetime = DateTime::createFromFormat('m-d-Y', $date); 
  $cDates[] = $datetime->format('Y-m-d');
 }

现在所有转换后的日期都存在于 $cDates 数组中。

【讨论】:

  • 非常感谢。我正在捕获像“$dates[] = $_post ...”这样的数组。但是,当我打印数组时,我得到了著名的 1970-01-01,而不是实际日期......当我只用 strtotime 和 print 进行迭代时,数组是空的。所以这可能是它出错的地方......
  • 这是我的错 .. 我认为 $_POST 日期是 d-m-y 格式,但它是 m-d-y .. strtotime 似乎不接受这种格式
猜你喜欢
  • 2021-03-21
  • 2011-05-05
  • 1970-01-01
  • 2011-03-16
  • 2016-09-15
  • 1970-01-01
  • 2019-07-30
  • 1970-01-01
  • 2013-06-28
相关资源
最近更新 更多