我在HTML5 type="date"
字段中有网络表单的用户输入。然后将此输入值(与其他值一起)保存为MySQL数据库中的JSON文档。现在我需要提取该日期并将其打印到生成的MS Word文档中,并使用一种给定的格式。大!但是,正如您所知,HTML5日期字段接受日期格式,具体取决于用户区域设置,设置等。我注意到在不同浏览器中输入的所有日期都保存在DB中的" Y-m-d"格式。在所有情况下都是如此吗?我可以依赖这种格式以备将来使用吗?找不到有关该主题的任何规范信息。
如果一个人不依赖" Y-m-d"格式是否有任何PHP库用于"猜测"日期格式?
答案 0 :(得分:1)
首先,为什么要在MySQL数据库中保存JSON文档而不是更合适的文档数据库(例如MongoDB)?
无论如何,基于this和this,显示的日期格式与实际值不同。 HTTP请求中的日期值始终格式为yyyy-mm-dd
,这是ISO 8601格式,我想它应该是可靠的。
在PHP中,您可以使用DateTime类处理日期字符串。此类支持许多不同的日期格式。例如:
// timezone is set based on your system preferences if not set
$date1 = new DateTime('2017-04-27', new DateTimeZone('+00:00'));
$date2 = new DateTime('27 April 2017', new DateTimeZone('+00:00'));
$date3 = new DateTime('2017-04-27T00:00:00+00:00');
var_dump($date1 == $date2); // bool(true)
var_dump($date1 == $date3); // bool(true)
如果日期字符串错误,则抛出异常:
try {
$date = new DateTime('2017 4 27');
} catch (Exception $e) {
echo $e->getMessage(); // DateTime::__construct(): Failed to parse time string (2017 4 27) at position 5 (4): Unexpected character
}
因此,在您的情况下,您可以使用此类进行日期验证,而不是正确的输出格式,例如:
$dateString = '2017-04-27T14:22:11+00:00';
try {
$date = new DateTime($dateString);
echo $date->format('Y-m-d'); // 2017-04-27
} catch (Exception $e) {
// do something else
}