DateTime :: format和strftime

时间:2013-06-03 22:33:29

标签: php datetime time datetime-format strftime

我有$date = $run['at'];给了我 2013-06-03T16:52:24Z (来自JSON输入)。 要将其转换为例如“ d M Y,H:i ”我使用

$date = new DateTime($run['at']);
echo $date->format('d M Y, H:i');

问题是我需要意大利语的日期。支持set_locale的唯一功能是strftime。 如何用DateTime::format(或替换,dunno)“包裹”strftime

3 个答案:

答案 0 :(得分:15)

setlocale(LC_TIME, 'it_IT.UTF-8');
$date = new DateTime($run['at']);
strftime("%d %B", $date->getTimestamp())

......工作。 :)

答案 1 :(得分:0)

这就是我结合 DateTime strftime()的功能解决的方法。

第一个允许我们管理具有奇怪日期格式的字符串,例如“ Ymd”。 第二种功能使我们可以用某种语言翻译日期字符串。

例如,我们从一个值“ 20201129”开始,并希望以意大利语可读的日期结尾,并以天和月的名称结尾,首字母大写:“ Domenica 29 novembre 2020”。

struct Response: Decodable {
    let name: String
    let addresses: [AddressType]
    
    enum CodingKeys: String, CodingKey {
        case name
        case addresses
    }
    
    init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: CodingKeys.self)
        
        name = try container.decode(String.self, forKey: .name)
        var unkeyedContainer = try container.nestedUnkeyedContainer(forKey: .addresses)
        var addresses = [AddressType]()
        while !unkeyedContainer.isAtEnd {
            let addressTypes: [AddressType]
            do {
                addressTypes = try unkeyedContainer.decode([String: Address].self).map {
                    AddressType(label: $0.key, addressList: [$0.value])
                }
            } catch DecodingError.typeMismatch {
                addressTypes = try unkeyedContainer.decode([String: [Address]].self).map {
                    AddressType(label: $0.key, addressList: $0.value)
                }
            }
            addresses.append(contentsOf: addressTypes)
        }
        self.addresses = addresses
    }
}

答案 2 :(得分:-3)

我相信"适当的"方式应该使用DateTimeZone