6

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

但我已经看到它只有在你填写表格时才有效dd-mm-yyyy

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

4

4 回答 4

28

停止使用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 年发布(请参阅发布日期)。如果 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";

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

于 2013-09-12T11:07:44.777 回答
0

为什么不使用str_replace

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

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

于 2013-09-12T09:54:57.027 回答
0

你的问题不是很清楚。

如果您从表单中收到格式为“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);
于 2013-09-12T09:58:23.400 回答
0

相当冗长。

$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);
于 2013-09-12T09:59:27.640 回答