strtotime 在将值用作硬编码字符串时不返回值

Posted

技术标签:

【中文标题】strtotime 在将值用作硬编码字符串时不返回值【英文标题】:strtotime doesn't return value while it works with value as hardcoded string 【发布时间】:2015-07-10 16:04:19 【问题描述】:

我正在从 excel 中读取一些数据并将它们导入数据库。但是遇到了一个奇怪的问题。除了日期部分,一切都很好。代码部分是:

$dob = $cells[$i][6];
echo $dob.'<br>';
$timestamp = strtotime($dob);
echo 'time- '.$timestamp;
echo 'time2- '.strtotime('01-01-2000');exit;

输出是:

01-01-2000
time- time2- 946677600

我在 excel 文件中使用的值与从输出中看到的 01-01-2000 完全相同。

我不明白为什么 strtotime 函数可以返回硬编码字符串版本的值,但不能返回从 excel 文件中读取的变量?

感谢您的帮助。

解决方案: 如果有人遇到同样的问题,我就是这样处理的。

$dob_temp = $cells[$i][6];
$dob_numbers = preg_replace("/[^0-9]/","",$dob_temp);
$timestamp = strtotime(substr($dob_numbers,0,2).'-'.substr($dob_numbers,2,2).'-'.substr($dob_numbers,4,4));
$dob = date('Y-m-d', $timestamp);

【问题讨论】:

【参考方案1】:

您从 excel 文件中检索到的字符串很可能包含一些奇怪的字符 - 例如,破折号而不是连字符会导致 strtotime 出错。

例子:

<?php
$dob = '01―01―2000';
echo $dob.'<br>';
$timestamp = strtotime($dob);
echo 'time- '.$timestamp;
echo 'time2- '.strtotime('01-01-2000');exit;

http://codepad.org/zKIqeHhO

您可能想要清理来自文件的日期或使用类似DateTime::createFromFormat 的东西来传递与字符串内容匹配的格式。

【讨论】:

我试过 DateTime::createFromFormat 但效果不佳,但我会尝试清理或分成子字符串 谢谢帮助。这绝对是性格问题。我什至无法成功获取 substr,所以我不得不清理除数字之外的所有内容。

以上是关于strtotime 在将值用作硬编码字符串时不返回值的主要内容,如果未能解决你的问题,请参考以下文章

将值传递给Angular 2组件的问题[重复]

MFC 工具提示,GetDlgItemText 不返回用于工具提示的文本

Jquery.ajax 将 null 发送到控制器,但使用硬编码的变量

如何嵌入app.config并硬编码其Web服务端点?

为啥 Oracle ADD_MONTHS() 返回的 sysdate 值与我硬编码今天的日期不同?

我可以在我的代码中硬编码字形索引吗?