【问题标题】:date format issue using php使用php的日期格式问题
【发布时间】:2017-08-26 07:13:33
【问题描述】:

这不是一个重复的问题。我正在使用 php date 函数来格式化日期。

我的date 值为:close_date:08/25/2017

这是 php 函数:$close_date = date('Y-m-d', strtotime($close_date));

打印close_date,结果为:2017-08-26

我的时区是:-5:00,服务器在UTC,所以在格式化日期的时候,日期被转换成UTC日期?

所以date 只是根据设置格式化日期或转换日期timezone

帮我解决这个问题。

我不想将我的日期转换为任何时区日期,我只想更改日期的格式。

我的输入是:08/25/2017

预期输出为:2017-08-25

【问题讨论】:

  • 不,这不是重复的。
  • 请分享您的输入和预期输出。
  • 试试这个$close_date="08/25/2017"; echo $close_date = date('Y-m-d', strtotime($close_date));
  • 需要在文件中设置默认时区

标签: php date


【解决方案1】:

您可能希望使用 DateTime 从所需格式创建日期对象并将其转换为您需要的格式。

DateTime::createFromFormat("m/d/Y","08/25/2017")->format("Y-m-d");

【讨论】:

  • 你确定,这个日期不依赖于任何时区?
  • @chiragsatapara 它只是按照指定的格式解析一个时间字符串。
  • 你说你只需要转换日期,在时区操作的情况下你也可以使用 DateTime 类 - DateTime::setTimeZone();
【解决方案2】:

如果您不想使用 PHP date 函数,他们会尝试使用 DateTime::createFromFormat 或编写一些手动代码来爆炸 $close_date 并以您想要的方式使用它.

第一种方法:

使用DateTime::createFromFormat。这将帮助您根据指定的格式解析时间字符串。

$close_date = DateTime::createFromFormat("m/d/Y", $close_date)->format("Y-m-d");

第二种方法:

使用一些手动代码:

$close_date = "08/25/2017";
$date_vars = preg_split("#/#", $close_date); 
print_r($date_vars);

然后使用$date_vars 转换为所需格式,如下代码:

$close_date = $date_vars[2]."-".$date_vars[0]."-".$date_vars[1];

P.S:您也可以使用 PHP explode() 函数来分解日期值。

【讨论】:

  • 对! =) 只是为了按照指定的格式解析一个时间字符串。
  • 如果您可能需要任何时区操作,请在最后使用setTimezone。在这里查看:createFromFormat
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2016-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多