【问题标题】:convert date dd/mm/yyyy format from a form to timestamp?将日期 dd/mm/yyyy 格式从表单转换为时间戳?
【发布时间】:2013-09-16 15:30:57
【问题描述】:

我有一个需要dd/mm/yyyy 格式的日期的表格 我尝试使用strtotime() 函数将其转换为时间戳

但我发现只有在表格中填写日期,如dd-mm-yyyy

我该如何解决?我不知道在国外,但在意大利没有人写这样的日期dd-mm-yyyy

【问题讨论】:

标签: php date datetime timestamp


【解决方案1】:

为什么不使用str_replace

$timestamp = strtotime(str_replace("/", "-", $dateString));

或者更好的是,在插入之前将字符串转换为YYYY-MM-DD

【讨论】:

【解决方案2】:

你的问题不是很清楚。

如果您从表单中收到格式为“dd/mm/yyyy”的日期,并且需要将其转换为“yyyy-mm-dd”,则只需使用substr

$date_eng=substr($data_ita,6,4)."-".substr($data_ita,3,2)."-".substr($data_ita,0,2);

$data_ita=substr($date_eng,8,2)."/".substr($date_eng,5,2)."/".substr($date_eng,0,4);

【讨论】:

  • 在我看来,使用 strtotime() 它也适用于 dd-mm-yyyy 格式
  • 是的,strtotime() 似乎也适用于“dd-mm-yyyy”。我认为您的问题也与欧洲和美国格式之间的切换有关。
  • @gabs: strtotime() 似乎也适用于“dd-mm-yyyy”,但请注意“此函数 [strtotime] 的每个参数都使用默认值时区,除非在该参数中指定了时区”(来自documentation)。更改服务器的时区可能会导致您出现意外行为。也许最好使用 mark-baker 建议的 DateTime 对象。
  • 为什么为什么为什么为什么要爆炸、替换甚至切断字符串???只需使用php.net/manual/en/datetime.createfromformat.php
  • @Glavić:如前所述,最好使用 DateTime 对象
【解决方案3】:

很长。

$get_array = explode('/', 'dd/mm/yyyy');

$day = $get_array[0];
$month = $get_array[1];
$year = $get_array[2];
$time_Stamp = mktime(0,0,0,$month,$day,$year);

【讨论】:

  • 为什么为什么为什么为什么要爆炸或替换字符串???只需使用php.net/manual/en/datetime.createfromformat.php
  • @Glavić 因为它在 PHP 5.3 以下不受支持
  • 已经有 5.5 了。我认为答案应该是最新的代码,而不是 2006 年的代码; yes php5.2 was released in 2006 and 5.3 in 2009。如果 OP 需要旧代码示例,他需要告诉。
  • @Glavić 你是对的,因此我 +1 你的答案,但让其他人回答而不是重复的批评吧?这就是为什么你似乎有点咆哮。一如既往,在 php 中,不仅有一个正确的答案和一个以上的功能视角。尊重他人。 :)
【解决方案4】:

停止使用strotime()date()time()等函数,开始使用DateTime

所有已知输入类型的完美解决方案:

$dt = DateTime::createFromFormat('d/m/Y', $yourDMYinput);
echo $dt->getTimestamp(); # or $dt->format('U');

为什么需要时间戳?

为什么要爆炸、替换甚至切断字符串???只需使用createFromFormat

Q1:因为 PHP 5.3 以下不支持。

v5.5 已经发布。我认为答案应该是最新的代码,而不是 2006 年的代码。是的,v5.2 于 2006 年发布,v5.3 于 2009 年发布(see release dates)。如果 OP 请求旧代码,请在 SO 上找到它,并用重复关闭此问题;不要回答。

Q2:因为我不知道 DateTime。

学习一下。

Q3:因为我可以用strotime()date()time() 等做更多事情。

告诉我这个函数可以做的一件事,而 DateTime 不能。

“弃用”代码示例:

$input = '12/09/2013'; # dd/mm/yyyy

$new = substr($input,6,4)."-".substr($input,3,2)."-".substr($input,0,2);
$new = strtotime($new);
echo "$new\n";

$m = explode('/', $input);
$new = mktime(0,0,0,$m[1],$m[0],$m[2]);
echo "$new\n";

$new = str_replace("/", "-", $input);
$new = strtotime($new);
echo "$new\n";

preg_match('~^(\d+)/(\d+)/(\d+)$~', $input, $m);
$new = strtotime("$m[3]-$m[2]-$m[1]");
echo "$new\n";

$m = sscanf($input, '%d/%d/%d');
$new = strtotime("$m[2]-$m[1]-$m[0]");
echo "$new\n";

如果您有另一个不推荐使用的代码示例,请编辑此答案并添加它;)

【讨论】:

  • 我对这个答案投了反对票,因为虽然我在很大程度上同意你的观点,但这不是一个咆哮的论坛。少吐槽,多回答。
  • @vascowhite:哈哈,你在哪里看到过激烈的谈话?如果你没有注意到我已经给出了 6 个,是的 6 个,方法/答案来解决他的问题。并且 ALL 的这些方法比 +1 的答案要好得多;)如果这很激烈,那么这是什么> stackoverflow.com/a/1732454/67332 ???
  • 5.2之前不能用这个。
  • @zzatkin: 否,DateTime::createFromFormat 不能在
  • @Glavić:感谢您的回答,我如何将这个 unix 时间戳更改为我作为输入提供的同一日期
猜你喜欢
  • 2023-03-15
  • 2014-06-11
  • 2017-08-21
  • 2022-01-25
  • 2013-10-19
  • 2020-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
相关资源
最近更新 更多