相关疑难解决方法(0)

如何以澳大利亚(即英国)格式制作strtotime解析日期:dd/mm/yyyy?

我无法相信我以前从未遇到过这个.

基本上,我正在解析人工创建的文本文档中的文本,我需要解析的一个字段是日期和时间.因为我在澳大利亚,日期格式化,dd/mm/yyyystrtotime只想将其解析为美国格式的日期.此外,爆炸式的/方法并不奏效,因为正如我所提到的,这些文件是手工打印的,其中一些是采用的形式d M yy.

我尝试了多种组合,setlocale但无论我尝试什么,语言总是设置为美国英语.

我相当确定setlocale是关键,但我似乎无法找到正确的代码.试过这些:

  • AU
  • AU-EN
  • EN_AU
  • 澳大利亚
  • AUS

还有什么我可以尝试的吗?

为清楚起见:我在带有Windows框的IIS上运行.

非常感谢 :)

伊恩

例:

$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
Run Code Online (Sandbox Code Playgroud)

产生

2 September 2010 14:00
Run Code Online (Sandbox Code Playgroud)

我想要它产生:

9 February 2010 14:00
Run Code Online (Sandbox Code Playgroud)

我的解决方案

我在这里给出了一个答案,因为它是一个比我更容易理解的解决方案,但这就是我想出来的:

$DateTime = "9/02/10 2.00PM";
$USDateTime = preg_replace('%([0-3]?[0-9]{1})\s*?[\./ ]\s*?((?:1[0-2])|0?[0-9])\s*?[./ ]\s*?(\d{4}|\d{2})%', '${2}/${1}/${3}', $DateTime);  
echo date('j F Y H:i',strtotime($USDateTime));
Run Code Online (Sandbox Code Playgroud)

因为我不能依赖用户与他们的日期条目保持一致,所以我的正则表达式更加复杂:

  • 0到1之间的0或1位数
  • 0到9之间的1位数 - 是的,这将匹配37作为有效日期,但我认为正则表达式已经够大了!
  • 可能是一些空白
  • 分隔字符('.','/'或'')
  • 可能是一些空白
  • 或者:
    • 10到12之间的数字OR
    • 1到9之间的数字,可选前导0
  • 可能是一些空白
  • 分隔字符('.','/'或'')
  • 可能是一些空白
  • 或者: …

php datetime locale date strtotime

11
推荐指数
1
解决办法
8103
查看次数

标签 统计

date ×1

datetime ×1

locale ×1

php ×1

strtotime ×1