Moh*_*oub 4 php sql-server date
我正在尝试更新数据库中的所有日期字段,为所有表中的每个日期添加 5 天。
我设法将日期和行 ID 提取到数组中,然后生成 SQL 代码语句来更新它们。但是,每个表都有不同的日期格式,有些包含时间,有些不包含时间。我想在日期上添加 5 天,然后将其保存回来。目前,如果所有日期都具有相同的格式,我可以这样做,但这不足以解决我的问题。
我想要的是一个可以从日期字符串生成字符串格式的代码。例如:
日期字符串2014-12-04我希望代码表明该日期具有Y-m-d格式。如果日期字符串是,2017-04-03 11:11:48.653我希望代码说这个日期格式是Y-m-d h:i:s。
如果您不需要保留格式(即您可以在添加五天的同时更改数据库中的格式),则可以将字符串扔到strtotime。如果可能的话,它将尝试检测格式:
$timestamp = strtotime($string_with_unknown_format);
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用正则表达式检查不同的格式:
function extractDateTimeFormat($string) {
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $string))
return 'Y-m-d';
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $string))
return 'Y-m-d H:i:s';
if (preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{3}$/', $string))
return 'Y-m-d H:i:s.v';
if (preg_match('/^\d{2}\/\d{2}\/\d{4}$/', $string))
return 'm/d/Y';
if (preg_match('/^\d{2}\.\d{2}\.\d{4}$/', $string))
return 'd.m.Y';
}
Run Code Online (Sandbox Code Playgroud)
然而,这可能会让人厌烦,具体取决于您期望的格式数量。另一方面 - 可以有多少个?
下一个替代方案是直接在字符串中用占位符替换数字 - 这会更灵活,但可能不太可预测。在这种情况下,行的顺序很重要。如果需要添加 12 小时格式 ( AM/ PM),则需要在 for 行之前插入行H:i:s,否则将不起作用。
function extractDateTimeFormat($string) {
$string = preg_replace('/\b\d{4}-\d{2}-\d{2}\b/', 'Y-m-d');
$string = preg_replace('/\b\d{2}\/\d{2}\/\d{4}\b/', 'm/d/Y');
$string = preg_replace('/\b\d{2}\.\d{2}\.\d{4}\b/', 'd.m.Y');
$string = preg_replace('/\b\d{2}:\d{2}\b:\d{2}\b/', 'H:i:s');
$string = preg_replace('/\b\d{2}:\d{2}\b/', 'H:i');
$string = preg_replace('/\.\d{3}\b/', '.v');
if (preg_match('/\d/', $string)
return false;
return $string;
}
Run Code Online (Sandbox Code Playgroud)
这样,您将独立检测日期和时间格式,因此您不必考虑每种可能的组合。
您必须检查实时数据哪种方法效果更好。
| 归档时间: |
|
| 查看次数: |
7526 次 |
| 最近记录: |